[英]pandas dataframe merge based on str.contains
我有兩個要基於df2的列值包含來自df1的列值的數據框。 我一直在嘗試使用str.contains和series.isin。 但到目前為止沒有運氣。 下面的例子。
df1
Domain Visits
aaa 1
bbb 3
ddd 5
df2
Domain Ads
aaa.com 2
bbb 4
c.com 3
e.net 6
合並的數據框應如下所示
mergeDF
Domain Visits Ads
aaa.com 1 2
bbb 3 4
c.com 3
ddd 5
e.net 6
提前謝謝。
設定
我們可以通過創建一個新的系列,其在各個領域的行開始df2
對應於df1
,如果這樣的行存在:
r = '({})'.format('|'.join(df1.Domain))
merge_df = df2.Domain.str.extract(r, expand=False).fillna(df2.Domain)
現在,我們的merge_df
如下所示:
0 aaa
1 bbb
2 c.com
3 e.net
Name: Domain, dtype: object
現在我們合並。 我們希望在這里進行外部合並,合並我們在Domain
列上的第一個DataFrame和我們merge_df
系列上的第二個DataFrame:
df1.merge(df2.drop('Domain', 1), left_on='Domain', right_on=merge_df, how='outer')
Domain Visits Ads
0 aaa 1.0 2.0
1 bbb 3.0 4.0
2 ddd 5.0 NaN
3 c.com NaN 3.0
4 e.net NaN 6.0
由於我們存儲了一個單獨的系列進行合並,並且沒有修改df2
,因此在完成此步驟之后,您就完成了合並的DataFrame。
嘗試對df2進行預處理,以獲取與df1相同格式的域:
df2['key'] = df2['Domain'].str.extract('(\w+)\.?')
df_out = df1.merge(df2, left_on='Domain', right_on='key', suffixes=('_x',''), how='outer')
df_out['Domain'] = df_out['Domain'].combine_first(df_out['Domain_x'])
df_out = df_out.drop(['Domain_x','key'], axis=1)
print(df_out)
輸出:
Visits Domain Ads
0 1.0 aaa.com 2.0
1 3.0 bbb 4.0
2 5.0 ddd NaN
3 NaN c.com 3.0
4 NaN e.net 6.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.