【问题标题】:How to merge 2 df based on comparison of 2 columns to match 1 column如何根据 2 列的比较合并 2 df 以匹配 1 列
【发布时间】:2020-03-03 12:05:02
【问题描述】:

如何.merge 2 df, 1 column 来匹配 2 column ??

  • 我们的目标是合并 2 个 df,以便将 REF 表中每个活动 ID 的记录计数到按 ID 划分的数据中。
  • 问题 .merge 只是将 1 列与 1 列进行比较

数据乱七八糟,对于某些行有 id 名称而不是 id。

如果我想将 1 列合并到 1 列,或者将 2 列合并到 2 列,但不能将 1 列合并到 2 列

参考表

g_spend =

campaignid   id_name      cost

154          campaign1    15
155          campaign2    12
1566         campaign33   12
158          campaign4    33

数据

cw = 

campaignid

154
154
155
campaign1    
campaign33
1566
158
campaign1    
campaign1    
campaign33
campaign4

期望的输出



g_spend =

campaignid  id_name      cost    leads

154        campaign1    15       5
155        campaign2    12       0
1566       campaign33   12       3
158        campaign4    33       2

我做了什么..

# Just work for one column

cw.head()
grouped_cw = cw.groupby(["campaignid"]).count()
grouped_cw.rename(columns={'reach':'leads'}, inplace=True)

grouped_cw = pd.DataFrame(grouped_cw)


# now merging
g_spend.campaignid = g_spend.campaignid.astype(str)

g_spend = g_spend.merge(grouped_cw, left_on='campaignid', right_index=True)

【问题讨论】:

  • @Quang Hoang ,您知道我如何做到这一点吗?我在另一个问题中错过了这一步,我需要潜在客户的数量才能完成它
  • 您是如何在所需的输出数据框中获得这些 Lead 列值的,对于活动 ID 154,cw 中只有 2 个值。你是怎么得到 5 个的?

标签: python pandas merge


【解决方案1】:

我首先将id_name 设置为g_spend 中的索引,然后在cw 上执行replace,然后是value_counts

s = (cw.campaignid
       .replace(g_spend.set_index('id_name').campaignid
       .value_counts()
       .to_frame('leads')
    )

g_spend = g_spend.merge(s, left_on='campaignid', right_index=True)

输出:

  campaignid     id_name  cost  leads
0        154   campaign1    15      5
1        155   campaign2    12      1
2       1566  campaign33    12      3
3        158   campaign4    33      2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多