我想根据Pandas中另一列中的值对一列中的值求和。 见下图。
在一列(A)中,值为1或0,在列B中,另一列是值。每当第一列中的值= 1时,我需要在第二列中添加(求和)两个值之间的值。
换句话说,在两个事件之间(由一个表示),我需要添加发生的其他事物(b列)的总量。
答案 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
,以便反转上述句子中的过程。