簡體   English   中英

根據對另一個 dataframe 的條件檢查,過濾來自一個 dataframe 的值

[英]Filter values from one dataframe based on conditional checks on another dataframe

考慮這兩個數據框(簡化示例):

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

請注意,出現在兩者中的名稱索引不匹配(我的數據集就是這種情況)。

我想 select 來自 DF1 的那些行,其中名稱在 DF2 中,並且該人的年齡與 DF2 中的相應值不匹配。 所以預期的 output 是:

     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

您可以在過濾掉 dataframe 之前使用merge

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

    Name  Age
0    Tom   20
1  krish   19

您使用update然后比較該值以查看它是否正在更新

dfTemp = df1.copy()
dfTemp = df1.set_index('Name').copy()
dfTemp.update(df2.set_index('Name'))
df1[df1.Age!=dfTemp.Age.values]
Out[405]: 
    Name  Age
0    Tom   20
2  krish   19

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM