如何汇总熊猫数据框中的不同行

时间:2019-05-20 11:25:40

标签: python pandas pandas-groupby

我试图用另一列的值之和添加新列,但仅适用于不同的行。 说我们有这个数据框:

    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

col2的值3仅具有一个不同的col1的值,因此投票仅为5。col2的值2具有3个不同的col1的值(a,b),所以总和为5 + 2

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

这应该在一行中完成:

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