如何按索引合并两组

时间:2019-03-24 13:00:03

标签: python pandas pandas-groupby

我需要将两个小组合并在一起。我该怎么办?

例如:

表1

Index|Column1|Column2|Values
0    |      A|      B|    10
1    |      A|      B|    20
2    |      B|      B|    10
3    |      B|      B|    10
4    |      B|      A|    30
5    |      C|      C|    30
6    |      C|      C|    10
7    |      C|      D|    10
8    |      C|      D|    20

第1列总和的第1组

Index|Values(sum)
A    |         30
B    |         50
C    |         70

第2列总和的第2组

Index|Values(sum)
A    |         30
B    |         50
C    |         40
D    |         30

现在,我想将Group1和Group2组合在一起,并像下面这样向Table1添加一列。

组合

Index|Values
A    |    60
B    |   100
C    |   110
D    |    30

表1

Index|Column1|Column2|Values|Combine
0    |      A|      B|    10|     60
1    |      A|      B|    20|     60
2    |      B|      B|    10|    100
3    |      B|      B|    10|    100
4    |      B|      A|    30|    100
5    |      C|      C|    30|    110
6    |      C|      C|    10|    110
7    |      C|      D|    10|    110
8    |      C|      D|    20|    110

3 个答案:

答案 0 :(得分:2)

您可以融化两列,然后聚合。在嵌套步骤中将值映射到Column1

mapper = df.melt('Values',['Column1', 'Column2']).groupby('value')['Values'].sum().to_dict()
df['Combine'] = df['Column1'].map(mapper)

    Column1 Column2 Values  Combine
index               
0   A       B       10      60
1   A       B       20      60
2   B       B       10      100
3   B       B       10      100
4   B       A       30      100
5   C       C       30      110
6   C       C       10      110
7   C       D       10      110
8   C       D       20      110

答案 1 :(得分:1)

如果您将数据框称为df,则可以

v = df.groupby('Column1').Values.sum().add(df.groupby('Column2').Values.sum(), fill_value=0)
df['Combine'] = v.loc[df['Column1']].values

答案 2 :(得分:0)

df['Values1'] = df.groupby('Column1')['Values'].transform('sum')

这将在Column1上进行分组。

df['Values2'] = df.groupby('Column2')['Values'].transform('sum')

这将在Column2上执行。 接下来,我们可以将结果合并如下:

df['Combine'] = df['Values1'] + df['Values2']