簡體   English   中英

熊貓:當列值與另一個DF的列值匹配時,提取DF的行

[英]Pandas: Extract rows of a DF when a column value matches with a column value of another DF

我有兩個DF1和DF2,如下所述。 兩個數據框的第一列“ POS”可能都有匹配項,但其他列將有所不同。 我想比較兩個數據幀的“ POS”列,如果DF1的“ POS”值位於DF2的“ POS”列中,則我想將該行存儲在新的DF1數據幀中,並對DF2進行相同操作。 我可以通過保留POS作為鍵並比較它們以獲得相應的值來輕松地使用字典。 但是字典不會接受重復的“ POS”值,所以我想知道Pandas DF中是否有解決方案。

df1 = 
   POS   id    freq
0 100 "idex" 3.0
1 102 "ter" 2.0
2 102 "pec" 4.0
3 103 "jek" 4.0
4 104 "jek" 4.0


df2 = 
   POS   id    freq
0 100 "treg" 3.0
1 102 "dfet" 2.2
2 102 "idet" 7.0
3 108 "jeik" 1.0
4 109 "jek" 4.0

Expected:
new_df1 = 
   POS   id    freq
0 100 "idex" 3.0
1 102 "ter" 2.0
2 102 "pec" 4.0


new_df2 = 
   POS   id    freq
0 100 "treg" 3.0
1 102 "dfet" 2.2
2 102 "idet" 7.0

您可以對兩個數據框使用isin

new_df1 = df1[df1.POS.isin(df2.POS)]

new_df2 = df2[df2.POS.isin(df1.POS)]

>>> new_df1
   POS    id  freq
0  100  idex   3.0
1  102   ter   2.0
2  102   pec   4.0
>>> new_df2
   POS    id  freq
0  100  treg   3.0
1  102  dfet   2.2
2  102  idet   7.0

我相信您正在描述經典的加入問題。 我建議使用.merge()方法:

df = pd.merge(df1, df2, how='left', on='POS')

這將返回一個以df1.POS作為索引的新數據幀。 來自df2的所有列都將位於df1中,但僅適用於匹配的POS值。 您可以在oder中使用how=參數來獲得所需的內容。 有關更多信息,請參見sql連接的類型。

暫無
暫無

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

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