我有包含许多列的数据框。有一个日期时间列,并且有重复的日期时间条目以及来自不同源的这些重复项的数据。我想根据以下内容删除重复项column "dt"
,但我想根据其中的内容保留结果column "pref"
。我在下面提供了简化的数据,但这样做的原因是我还有一个值列,并且"Pref"
列是数据源。我更喜欢某些数据源,但每个日期只需要一个条目(column "dt")
。我希望这段代码能够正常工作,这样我就不必提供完整的首选项列表。
人工数据代码
import pandas as pd
import numpy as np
df=pd.DataFrame({'dt':[1,1,1,2,2,3,3,4,4,5],
"Pref":[1,2,3,2,3,1,3,1,2,3],
"Value":np.random.normal(size=10),
"String_col":['A']*10})
df
Out[1]:
dt Pref Value String_col
0 1 1 -0.479593 A
1 1 2 0.553963 A
2 1 3 0.194266 A
3 2 2 0.598814 A
4 2 3 -0.909138 A
5 3 1 -0.297539 A
6 3 3 -1.100855 A
7 4 1 0.747354 A
8 4 2 1.002964 A
9 5 3 0.301373 A
所需输出 1(情况 1):
在这种情况下,我的偏好列表一直很重要。我最喜欢数据源 2,其次是 1,但如果我只有 3,我会选择 3。
preference_list=[2,1,3]
Out[2]:
dt Pref Value String_col
1 1 2 0.553963 A
3 2 2 0.598814 A
5 3 1 -0.297539 A
8 4 2 1.002964 A
9 5 3 0.301373 A
所需输出 2(情况 2)
在本例中,我只想查找数据源 1。如果它不存在,我实际上并不关心其他数据源是什么。
preference_list2=[1]
Out[3]:
dt Pref Value String_col
0 1 1 -0.479593 A
3 2 2 0.598814 A
5 3 1 -0.297539 A
7 4 1 0.747354 A
9 5 3 0.301373 A
我可以想象在一个非常缓慢且复杂的循环中执行此操作,但我觉得应该有一个命令来完成此操作。还有一件重要的事情:我需要在数据框中保留一些其他文本列,因此 .agg 可能会导致这些元数据出现问题。我尝试过排序和使用keep
论证中drop_duplicates
,但没有成功。