Python 如何对数据帧中的不同行求和

Python 如何对数据帧中的不同行求和,python,pandas,pandas-groupby,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和c

我试图添加一个新列,该列包含另一列的值之和,但仅针对不同的行。 假设我们有这个数据帧:

    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和col2的不同对的所有票数求和。每对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,需要:

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

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

这应该在一行中完成:

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

这应该在一行中完成:

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

输入数据框的col2数据错误,其中col1是c,它应该是4而不是2。输入数据框的col2数据错误,其中col1是c,它应该是4而不是2s=df。drop_duplicates['col1','col2']。groupby'col2'['vote']。sumfor col1和col2我应该改为输入列名吗?感谢you@natsumiyu是的,如果列名中有空格,则不要使用点表示法。将df.col2.map替换为df['col2'].maps=df.drop_重复项['col1','col2'].groupby'col2'['vote'].sumfor col1和col2是否应改为使用列名?感谢you@natsumiyu是的,如果列名中有空格,则不要使用点表示法。用df['col2']替换df.col2.map。map@anky_91选项非常快。zipa发布的多功能一体解决方案还可以,但速度较慢。多亏了两者:@anky_91选项速度非常快。zipa发布的多功能一体解决方案还可以,但速度较慢。多亏了这两方面: