【发布时间】:2020-02-24 22:28:56
【问题描述】:
我被困在 pandas concat 和 merge 函数之间,努力使两者兼得。我需要对名称和日期的行进行内部连接,对公共列 A 和 B 求和,并保留类别中的值(如果需要,我真的可以将其添加到连接中,它们匹配)。
例子-
df1
| name | date | A | B | category |
|------|----------|---|---|----------|
| W | 1/1/2020 | 1 | 1 | home |
| W | 1/2/2020 | 1 | 1 | home |
| Y | 1/3/2020 | 1 | 1 | garden |
| Y | 1/4/2020 | 1 | 1 | garden |
df2
| name | date | A | B | category |
|------|----------|---|---|----------|
| W | 1/1/2020 | 2 | 2 | home |
| W | 1/2/2020 | 1 | 1 | home |
| Y | 1/3/2020 | 1 | 1 | garden |
| Y | 1/5/2020 | 1 | 1 | garden |
想要的结果 -
| name | date | A | B | category |
|------|----------|---|---|----------|
| W | 1/1/2020 | 3 | 3 | home |
| W | 1/2/2020 | 2 | 2 | home |
| Y | 1/3/2020 | 2 | 2 | garden |
我发现merge 将加入行,但会复制任何未加入的列而不是将它们相加。
concat 将对行求和,但不进行内部连接,因此我仅从一个数据帧或另一个数据帧中获取包含数据的行。我试过pd.concat([df_1, df_2], join='inner',但“内在”并没有达到我想要的效果。
【问题讨论】:
-
我会说在
date和category上使用groupby,以及sum(A)、sum(B)作为您的聚合。