簡體   English   中英

pandas合並兩個數據幀,其中一個包含另一個數據幀

[英]pandas merge two dataframes with one contains column values in another

我有兩個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

我試着看看namedf2是否包含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'")

暫無
暫無

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

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