Суммирование определенных столбцов на основе сопоставления - PullRequest
0 голосов
/ 18 января 2019

У меня есть серия, которая содержит сопоставление:

serm = pd.Series(
data={'ARD1': 53, 'BUL1': 37, 
'BUL2': 37, 'BSR1': 49, 'BTR1': 53, 'CR1': 53,
'CRR1': 53, 'CRE3': 53,'TAB1': 52, 'NEP1': 42, 'HAL1': 42})

, которое отображает идентификатор актива (индекс) в область (значение).У меня есть следующий dataframe где serm index это имена столбцов.

data=pd.DataFrame(data={'ARD1': {0: 4.0, 1: 2.0, 2: 2.0, 3: 3.0, 4: 2.0},
'BUL1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'BUL2': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'BSR1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'BTR1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'CR1': {0: 15.0, 1: 13.0, 2: 13.0, 3: 11.0, 4: 13.0},
'CRR1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'CRE3': {0: 8.0, 1: 10.0, 2: 9.0, 3: 10.0, 4: 11.0},
'TAB1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'NEP1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
'HAL1': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}})

Я хотел бы суммировать столбцы data, которые попадают в одну и ту же область, в соответствии с отображением serm.Как мне этого добиться (чем больше pandanoic, тем лучше)

1 Ответ

0 голосов
/ 18 января 2019

Использование Index.map с groupby для столбцов и совокупности sum:

df = data.groupby(data.columns.map(serm.get), axis=1).sum()
print (df)
    37   42   49   52    53
0  0.0  0.0  0.0  0.0  27.0
1  0.0  0.0  0.0  0.0  25.0
2  0.0  0.0  0.0  0.0  24.0
3  0.0  0.0  0.0  0.0  24.0
4  0.0  0.0  0.0  0.0  26.0

Или назначьте столбцы обратно и используйте sum:

data.columns = data.columns.map(serm.get)
df = data.sum(level=0, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...