Как объединить две группы по индексу - PullRequest
0 голосов
/ 24 марта 2019

Мне нужно объединить две группы вместе. Как мне быть?

Например:

Table1

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

Table1

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 ]

2 голосов
/ 24 марта 2019

Вы можете растопить две колонки и затем агрегировать. Сопоставьте значения со столбцом 1 на шаге гнезда

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 голос
/ 24 марта 2019

Если ваш фрейм данных называется df, вы можете позволить

v = df.groupby('Column1').Values.sum().add(df.groupby('Column2').Values.sum(), fill_value=0)
df['Combine'] = v.loc[df['Column1']].values
0 голосов
/ 24 марта 2019

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

Это будет группировать по столбцу 1.

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

Это будет делать по столбцу 2.Далее мы можем объединить результаты, как показано ниже:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...