My dataframe A:

id   groupA    groupB    groupC    groupD   groupE    ...
001    0         0         0         0        0
002    0         0         0         0        0
003    0         0         0         0        0
  ...

数据帧B:
id     value     count
001    groupA      2
002    groupB      1
001    groupB      3
001    groupC      1
003    groupC      2
002    groupA      1


dfB.groupby(['id', 'value'])['count'].sum()

通过运行这个groupby,我得到:
id  value
1   groupA    2
    groupB    3
    groupC    1
2   groupA    1
    groupB    1
3   groupC    2
Name: count, dtype: int64

我试图将此结果转换为数据帧并将其映射回数据帧a,但没有成功。
我理想的数据帧输出是:
id   groupA    groupB    groupC    groupD   groupE    ...
001    2         3         1         0        0
002    1         1         0         0        0
003    0         0         2         0        0
  ...

最佳答案

您可以旋转df2并合并这两个数据帧,

df2.pivot_table(index = 'id', columns = 'value', values = 'count', aggfunc='sum').reset_index()\
.merge(df1, how = 'left').fillna(0).astype(int)


    id  groupA  groupB  groupC  groupD  groupE
0   1   2       3       1       0       0
1   2   1       1       0       0       0
2   3   0       0       2       0       0

你也可以对groupby做同样的事情,
df2.groupby(['id', 'value'])['count'].sum().unstack().reset_index()\
.merge(df1, how = 'left').fillna(0).astype(int)

关于python - Python-groupby sum映射到另一个数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54064802/

10-12 17:01
查看更多