python - 基于 str.contains 的 Pandas 数据框合并

标签 python pandas dataframe

我有两个数据框,我想根据 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/

相关文章:

python - 忽略 Pandas 数据框中的非数字字符串值

python - 类型错误 : Field 'id' expected a number but got (()

python - 添加前缀失败并显示百分比

python - 数据没有被正确抓取

python - Pandas 读取 csv 时未正确读取文件。没有分成适当的列

python - 最小化具有共同值的行,添加附加值的列

r - 我们如何返回 R 中两个字符串中常见字符的数量?

python - 给定 DatetimeIndex 和日期时间感知记录的集合,如何创建 Pandas DataFrame?

python - 正则表达式和 Pandas : extract partial string on name match

python - 使用条件总和的结果创建 Pandas DataFrame 列