Python 熊猫:当一个列值与另一个DF的列值匹配时,提取DF的行
我有两个DF1和DF2,如下所述。两个数据帧的第一列“POS”可能匹配,但其他列将不同。我想比较两个数据帧的'POS'列,如果DF1的'POS'值在DF2'POS'列中,我想将该行存储在新的DF1数据帧中,并对DF2执行相同的操作。我可以很容易地使用字典,将POS作为键,比较它们以获得相应的值。但是字典不会接受重复的“POS”值,所以我想知道是否有一个解决方案Python 熊猫:当一个列值与另一个DF的列值匹配时,提取DF的行,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个DF1和DF2,如下所述。两个数据帧的第一列“POS”可能匹配,但其他列将不同。我想比较两个数据帧的'POS'列,如果DF1的'POS'值在DF2'POS'列中,我想将该行存储在新的DF1数据帧中,并对DF2执行相同的操作。我可以很容易地使用字典,将POS作为键,比较它们以获得相应的值。但是字典不会接受重复的“POS”值,所以我想知道是否有一个解决方案 df1 = POS id freq 0 100 "idex" 3.0 1 102 "ter" 2.0 2 102 "p
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
您可以对两个数据帧使用
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值。您可以使用
how=
参数来获得所需的内容。有关更多信息,请参见我相信您描述的是一个典型的连接问题。
我建议使用.merge()
方法:
df=pd.merge(df1,df2,how='left',on='POS')
这将返回一个以df1.POS作为索引的新数据帧。df2中的所有列都将在df1中,但仅适用于匹配的POS值。您可以使用
how=
参数来获得所需的内容。有关更多信息,请参见能否更好地使这些帧复制可复制?完整列表或粘贴df.head()
的输出,而不是两者都粘贴。对此表示抱歉。非常感谢您修复它们@saculIt听起来您希望在一个条件下加入(df1.POS==df2.POS),并保留第一个数据帧,然后对第二个数据帧执行相同的操作。这就是它的范围吗?你能不能把这些框架复制得更容易些?完整列表或粘贴df.head()
的输出,而不是两者都粘贴。对此表示抱歉。非常感谢您修复它们@saculIt听起来您希望在一个条件下加入(df1.POS==df2.POS),并保留第一个数据帧,然后对第二个数据帧执行相同的操作。这就是问题的范围吗?