我有两个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
答案 0 :(得分:5)
您可以对两个数据框使用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
答案 1 :(得分:0)
我相信您正在描述经典的加入问题。
我建议使用.merge()
方法:
df = pd.merge(df1, df2, how='left', on='POS')
这将返回一个以df1.POS作为索引的新数据帧。来自df2的所有列都将位于df1中,但仅适用于匹配的POS值。您可以在oder中使用how=
参数来获得所需的内容。有关更多信息,请参见types of sql joins