我试图用另一列的值之和添加新列,但仅适用于不同的行。 说我们有这个数据框:
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
答案 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