我有两个数据框,我想根据 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
合并后的Dataframe应该是这样的
合并DF
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。
关于python - 基于 str.contains 的 Pandas 数据框合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51955386/