Panda 合并两个数据帧,其中一个数据帧包含另一个数据帧中的列值



我有两个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是否在df2中包含one,并在df1中找到相应的group;然后合并df1df2;

a = df2['name'].str.contains(pat=r'(?i)one', regex=True)
valid_groups = df2.loc[a]['group'].tolist()
c = df1['group'].isin(valid_groups)
df3 = df1.loc[c]
df4 = df3.merge(df2, how='left', on=['group'])
group    name    id
0001     one     1
0001     one     2
0001     one     3
0002     one     4
0002     one     5

我想知道是否有更好的方法可以做到这一点,更有效的方法。

如果只需要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

您可以使用:

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'")

相关内容

最新更新