我想groupby
在'A'和'B'中使用相同值的两列,并根据该值所在的列生成shift().rolling()
df
s A B ValueA ValueB
0 1 b a 1 3
1 1 c a 2 2
2 0 a b 2 4
3 0 c b 1 3
4 0 a c 2 1
5 0 c a 4 2
6 0 b a 7 4
7 0 c b 1 5
现在,如果值在列“a”中考虑Valueto ^ {CD2>},如果该值在列“B”中,则考虑ValueB到^ {CD2>}/P>
我尝试了此代码,但结果不正确
代码
from numpy.core.numeric import NaN
df = pd.DataFrame({
's' : [1,1,0,0,0,0,0,0],
'A' : ['b','c','a','c','a','c','b','c'],
'B': ['a', 'a', 'b', 'b','c','a','a','b'],
'ValueA':[1,2,2,1,2,4,7,1],
'ValueB':[3,2,4,3,1,2,4,5]
})
print(df)
df[['sumA','sumB']] = df.groupby(['A','B'])[['ValueA','ValueB']].shift().rolling(2, min_periods=2).sum()
print(df)
预期产量
ValueA ValueB
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 2.0 4.0
6 7.0 4.0
7 5.0 10.0
我尝试了非循环版本,但是
shift
没有保留组分区(基于this答案)
产出:
相关问题 更多 >
编程相关推荐