我有一个包含两列a和b的数据框,我想要输出数据框中的一列c,其值是b列中的值之和,与a列中的1对应,并将该总和存储在下面的一个索引中c列
这是我拥有的输入数据:
a b
0 0 0.1
1 0 0.4
2 0 0.2
3 1 0.4
4 1 0.8
5 0 0.1
6 0 1.3
7 1 2.4
8 1 1.2
9 1 1.7
10 1 0.9
11 0 3.2
并且我希望输出是这样的:
a b c
0 0 0.1 0.0
1 0 0.4 0.0
2 0 0.2 0.0
3 1 0.4 0.0
4 1 0.8 0.0
5 0 0.1 1.2
6 0 1.3 0.0
7 1 2.4 0.0
8 1 1.2 0.0
9 1 1.7 0.0
10 1 0.9 0.0
11 0 3.2 6.2
这是我的第一个问题,对不起,如果我的问题还不够美观,我们将不胜感激,谢谢
答案 0 :(得分:2)
使用:
#compare by 1 with equal
m1 = df['a'].eq(1)
#create unique groups
s = df['a'].ne(df['a'].shift()).cumsum()
#get sums with transform for new column filled aggregate values, shift one value
df['c'] = df['b'].groupby(s).transform('sum').shift().fillna(0)
#set 0 to all values with not first 0 groups
df.loc[m1 | s.duplicated(), 'c'] = 0
print (df)
a b c
0 0 0.1 0.0
1 0 0.4 0.0
2 0 0.2 0.0
3 1 0.4 0.0
4 1 0.8 0.0
5 0 0.1 1.2
6 0 1.3 0.0
7 1 2.4 0.0
8 1 1.2 0.0
9 1 1.7 0.0
10 1 0.9 0.0
11 0 3.2 6.2