【问题标题】:Filter values from one dataframe based on conditional checks on another dataframe根据对另一个数据帧的条件检查从一个数据帧过滤值
【发布时间】:2022-01-06 22:42:21
【问题描述】:

考虑这两个数据框(简化示例):

DF1
     Name  Age
0    Tom   20
1   nick   21
2  krish   19
3   jack   18


DF2
     Name  Age
0    krish 40
1    jack  18
2    Tom   50
3    Jim   21

请注意,出现在两者中的名称的索引不匹配(我的数据集就是这种情况)。

我想从 DF1 中选择姓名在 DF2 中且该人的年龄与 DF2 中的相应值不匹配的那些行。所以预期的输出是:

     Name  Age
0    Tom   20
2  krish   40

我可以过滤与一个条件匹配的行(例如,名称在 DF2 中),但我无法弄清楚如何同时检查这两个条件。有什么想法吗?

In: df1[df1['Name'].isin(df2['Name'].tolist())]
Out: 
        Name    Age
    0   Tom 20
    2   krish   19
    3   jack    18

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以在过滤掉数据框之前使用merge

    >>> df1.merge(df2, on='Name', how='left', suffixes=('', '2')) \
           .query('Age != Age2')[df1.columns]
    
        Name  Age
    0    Tom   20
    1  krish   19
    

    【讨论】:

    • 感谢@Corralien 这对我的数据有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多