【问题标题】:Using Python dictionary to filter unique matches in a pandas df使用 Python 字典过滤熊猫 df 中的唯一匹配项
【发布时间】:2021-03-10 01:57:48
【问题描述】:

我有一个像这样的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

我需要能够根据 CODEDATE 从原始 df 中提取非常具体的记录对。

所以,我的最终输出应该是这样的:

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]

问题是当我尝试这个时,结果似乎只是返回了CODEDATE 的所有可能组合,大概是因为它正在评估每个实例中是否存在 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 配对? 谢谢

【问题讨论】:

    标签: pandas filtering


    【解决方案1】:

    试试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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2017-07-24
      • 2019-03-12
      • 2017-12-28
      • 1970-01-01
      • 2022-01-22
      • 2019-02-12
      相关资源
      最近更新 更多