Pandas - 将值中的值汇总到另一列中的值之间

时间:2017-11-06 10:41:49

标签: python pandas

我想根据Pandas中另一列中的值对一列中的值求和。 见下图。

在一列(A)中,值为1或0,在列B中,另一列是值。每当第一列中的值= 1时,我需要在第二列中添加(求和)两个值之间的值。

换句话说,在两个事件之间(由一个表示),我需要添加发生的其他事物(b列)的总量。

enter image description here

2 个答案:

答案 0 :(得分:3)

使用groupby transform Socket socket = Socket.getInstance(); private Emitter.Listener onConnect = new Emitter.Listener() { @Override public void call(final Object... args) { //Socket on connect callback } }; socket.on("connect", onConnect); socket.connect(); numpy.where添加空字符串或sum s(如果需要数字列):

NaN
a = df['A'].shift().cumsum().fillna(df['A'].iat[0])
df['C'] = np.where(a.duplicated(keep='last'), '', df['B'].groupby(a).transform('sum')) 

print (df)
   A  B   C
0  1  5    
1  0  2    
2  0  1    
3  0  5    
4  1  4  17
5  0  4    
6  0  2    
7  0  4    
8  1  4  14

详情:

df['C'] = np.where(a.duplicated(keep='last'), np.nan, df['B'].groupby(a).transform('sum'))
print (df)
   A  B     C
0  1  5   NaN
1  0  2   NaN
2  0  1   NaN
3  0  5   NaN
4  1  4  17.0
5  0  4   NaN
6  0  2   NaN
7  0  4   NaN
8  1  4  14.0

答案 1 :(得分:0)

为什么不将列相加相乘:

在表格中迭代for循环,在A==1时,它会将1*B添加到总和中,而当A==0时,它会将0*B添加到总和中

然后,如果您需要获取A==0的样本总和,则迭代产品(1-A)*B,以便反转上述句子中的过程。