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发布的多功能一体解决方案还可以,但速度较慢。多亏了这两方面: