【问题标题】:Combining 2 dataframes with different number of columns and aggregate them with sum将 2 个具有不同列数的数据框组合起来,并将它们与 sum 聚合
【发布时间】:2020-06-05 15:56:37
【问题描述】:

所以我有这两个数据框

df1
title      URL  number         date
    a   /url-1       1   21-02-2020
    a   /url-1      10   20-02-2020
    a   /url-1      17   19-02-2020
    b   /url-2     100   21-02-2020
    b   /url-2     106   20-02-2020
df2
   URL  number         date
/url-1       5   21-02-2020
/url-1      12   20-02-2020
/url-1      50   19-02-2020
/url-3       9   21-02-2020
/url-3      11   20-02-2020

所以我需要执行这些操作以将它们组合成 1 个数据框:

1) 外部连接(如果我错了,请纠正我)df1 和 df2 但我不知道如何在 4 列中显示结果,因为我需要按“URL”和“日期”列分组(将是如下图所示)。

2) 聚合 df1["number"] 和 df2["number"] 并将它们相加

这是我想要的结果:

new_df
title      URL  number         date
    a   /url-1       6   21-02-2020
    a   /url-1      22   20-02-2020
    a   /url-1      67   19-02-2020
    b   /url-2     100   21-02-2020
    b   /url-2     106   20-02-2020
 null   /url-3       9   21-02-2020
 null   /url-3      11   20-02-2020

非常感谢您的帮助! :)

【问题讨论】:

  • 为什么 url-3 的数字是 5 和 22,而不是分别是 9 和 11?
  • 您好,我已经更新了数字。刚才打错了:)

标签: python-3.x pandas pandas-groupby outer-join


【解决方案1】:

使用pandas merge,将how 选项设置为外部,并在URL 和日期上合并两个数据框。
将这两个数字相加并仅保留相关的列。

M = df1.merge(df2,how='outer', on=['URL','date'])
M['number'] = M.number_x.fillna(0).add(M.number_y.fillna(0))
M.filter(['title','URL','number','date'])

    title   URL number  date
0   a   /url-1  6.0 21-02-2020
1   a   /url-1  22.0    20-02-2020
2   a   /url-1  67.0    19-02-2020
3   b   /url-2  100.0   21-02-2020
4   b   /url-2  106.0   20-02-2020
5   NaN /url-3  9.0 21-02-2020
6   NaN /url-3  11.0    20-02-2020

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2021-07-28
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多