熊猫合并两个数据框,其中一个包含另一列的值

时间:2019-08-06 10:49:40

标签: python python-3.x pandas dataframe

我有两个class A { @JsonProperty int some = 1; @JsonUnwrapped B anotherObject = new B(); } class B { @JsonProperty int someB = 2; }

df

我试图查看df1 id group 1 0001 2 0001 3 0001 4 0002 5 0002 6 0003 df2 group name 0001 one 0002 one 0003 two 中的name是否包含one,并在df2中找到相应的group;然后在这方面合并df1df1

df2

我想知道有没有更好的方法,更有效的方法。

2 个答案:

答案 0 :(得分:2)

如果只需要merge一列,则使用map更快:

a = df2['name'].str.contains(pat=r'(?i)one', regex=True)
valid_groups = df2[a].copy()
df = df1[df1['group'].isin(valid_groups['group'])].copy()

df['name'] = df['group'].map(valid_groups.set_index('group')['name'])

print (df)
  id group name
0  1  0001  one
1  2  0001  one
2  3  0001  one
3  4  0002  one
4  5  0002  one

答案 1 :(得分:1)

您可以使用:

df2.merge(df1,on='group').loc[lambda x: x.name=='one']
#df2.merge(df1,on='group').loc[lambda x: x.name.str.contains(pat=r'(?i)one', regex=True)]

或者:

df2.merge(df1,on='group').query("name=='one'")