Как суммировать отдельные строки в панде Dataframe - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь добавить новый столбец с суммой значений другого столбца, но только для отдельных строк. Скажем, у нас есть этот фрейм данных:

    col1     col2   vote
0     a        2     5
1     a        2     5
2     b        2     2
3     c        4     1
4     d        3     5
5     d        3     5
6     d        3     5

Я хочу сгруппировать по col2, а затем сложить все голоса разных пар col1 и col 2 (голосование всегда одинаково для каждой пары col1 и col2.

Я пытаюсь получить этот результат:

    col1     col2   vote   aggrVote
0     a        2     5        7
1     a        2     5        7
2     b        2     2        7
3     c        4     1        1
4     d        3     5        5
5     d        3     5        5
6     d        3     5        5

Значение 3 для col2 имеет только одно отдельное значение col1, поэтому голосование составляет всего 5. Значение 2 для col2 имеет 3 различных значения col1 (a, b), поэтому сумма равна 5 + 2

Ответы [ 2 ]

4 голосов
/ 20 мая 2019

IIUC, вам нужно:

s = df.drop_duplicates(['col1','col2']).groupby('col2')['vote'].sum() #thanks @jez
df['aggrVote']=df.col2.map(s)
print(df)

  col1  col2  vote  aggrVote
0    a     2     5         7
1    a     2     5         7
2    b     2     2         7
3    c     4     1         1
4    d     3     5         5
5    d     3     5         5
6    d     3     5         5
0 голосов
/ 20 мая 2019

Это должно сделать все это в одной строке:

df
#  col1  col2  vote
#0    a     2     5
#1    a     2     5
#2    b     2     2
#3    c     4     1
#4    d     3     5
#5    d     3     5
#6    d     3     5

df['aggrVote'] = df.groupby(['col2'])['vote'].transform(lambda x: x.unique().sum())

df
#  col1  col2  vote  aggrVote
#0    a     2     5         7
#1    a     2     5         7
#2    b     2     2         7
#3    c     4     1         1
#4    d     3     5         5
#5    d     3     5         5
#6    d     3     5         5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...