使用 Python 字典过滤 pandas df 中的唯一匹配项
Using Python dictionary to filter unique matches in a pandas df
我有一个像这样的 df:
df = DataFrame({'CODE': ['AB12', 'AB12', 'CD12', 'CD12', 'CD14', 'CD14'], 'DATE': ['2021-02-01', '2021-03-06', '2021-02-01', '2021-03-06', '2021-02-01', '2021-03-06'], 'VALUE':[0,4,5,5,0,0]})
CODE DATE VALUE
AB12 2021-02-01 0
AB12 2021-03-06 4
CD12 2021-02-01 5
CD12 2021-03-06 5
CD14 2021-02-01 0
CD14 2021-03-06 0
我需要能够从原始 df 中提取非常具体的记录对,基于 CODE
和 DATE
。
所以,我的最终输出应该是这样的:
CODE DATE VALUE
AB12 2021-02-01 0
CD12 2021-03-06 5
CD14 2021-03-06 0
我做了一些研究,发现我可以通过使用像下面这样的字典来实现它:
my_filter = {'CODE':['AB12','CD12','CD14'], 'DATE':['2021-02-01','2021-03-06','2021-03-06']}
然后使用过滤:
res = df[df.isin(my_filter).sum(1) == 2]
问题是,当我尝试这个时,结果似乎 return CODE
和 DATE
的所有可能组合,大概是因为它正在评估是否有任何一个值在 CODE 或 DATE 中出现在每个实例中。
res
CODE DATE VALUE
0 AB12 2021-02-01 0
1 AB12 2021-03-06 4
2 CD12 2021-02-01 5
3 CD12 2021-03-06 5
4 CD14 2021-02-01 0
5 CD14 2021-03-06 0
我如何创建一个字典来将每个 CODE
与相应的 DATE
配对?
谢谢
尝试 merge
:
df.merge(pd.DataFrame(my_filter), on=['CODE','DATE'])
输出:
CODE DATE VALUE
0 AB12 2021-02-01 0
1 CD12 2021-03-06 5
2 CD14 2021-03-06 0
我有一个像这样的 df:
df = DataFrame({'CODE': ['AB12', 'AB12', 'CD12', 'CD12', 'CD14', 'CD14'], 'DATE': ['2021-02-01', '2021-03-06', '2021-02-01', '2021-03-06', '2021-02-01', '2021-03-06'], 'VALUE':[0,4,5,5,0,0]})
CODE DATE VALUE
AB12 2021-02-01 0
AB12 2021-03-06 4
CD12 2021-02-01 5
CD12 2021-03-06 5
CD14 2021-02-01 0
CD14 2021-03-06 0
我需要能够从原始 df 中提取非常具体的记录对,基于 CODE
和 DATE
。
所以,我的最终输出应该是这样的:
CODE DATE VALUE
AB12 2021-02-01 0
CD12 2021-03-06 5
CD14 2021-03-06 0
我做了一些研究,发现我可以通过使用像下面这样的字典来实现它:
my_filter = {'CODE':['AB12','CD12','CD14'], 'DATE':['2021-02-01','2021-03-06','2021-03-06']}
然后使用过滤:
res = df[df.isin(my_filter).sum(1) == 2]
问题是,当我尝试这个时,结果似乎 return CODE
和 DATE
的所有可能组合,大概是因为它正在评估是否有任何一个值在 CODE 或 DATE 中出现在每个实例中。
res
CODE DATE VALUE
0 AB12 2021-02-01 0
1 AB12 2021-03-06 4
2 CD12 2021-02-01 5
3 CD12 2021-03-06 5
4 CD14 2021-02-01 0
5 CD14 2021-03-06 0
我如何创建一个字典来将每个 CODE
与相应的 DATE
配对?
谢谢
尝试 merge
:
df.merge(pd.DataFrame(my_filter), on=['CODE','DATE'])
输出:
CODE DATE VALUE
0 AB12 2021-02-01 0
1 CD12 2021-03-06 5
2 CD14 2021-03-06 0