我在python中有以下数据帧:
month = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4]
active = [1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1]
data1 = [1709.1,3869.7,4230.4,4656.9,48566.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93738.2,189293.2,194412.6,206585.8]
df = pd.DataFrame({
'month' : month,
'active' : active,
'd1' : data1,
'calculate' : 0,
});
我想用下面的方法计算“calculate”列:
^{pr2}$我的做法如下:
df['calculate'] = np.where(
df.month > 1,
np.where(
df.active,
(df.d1/3).cumsum(),
0,
),
(df['d1']/3)
)
但结果并非如预期:
month active d1 calculate 0 1 1 1709.1 569.700000 1 2 1 3869.7 1859.600000 2 3 1 4230.4 3269.733333 3 4 1 4656.9 4822.033333 4 5 0 48566.0 0.000000 5 6 0 0.0 0.000000 6 7 0 0.0 0.000000 7 8 0 0.0 0.000000 8 9 0 0.0 0.000000 9 10 0 0.0 0.000000 10 11 0 0.0 0.000000 11 12 0 0.0 0.000000 12 13 0 0.0 0.000000 13 14 0 0.0 0.000000 14 15 0 0.0 0.000000 15 16 0 0.0 0.000000 16 17 0 0.0 0.000000 17 18 0 0.0 0.000000 18 19 0 0.0 0.000000 19 20 0 0.0 0.00 20 1 1 93738.2 31246.07 21 2 1 189293.2 115354.50 22 3 1 194412.6 180158.70 23 4 1 206585.8 249020.63
我不知道我是否清楚我的要求,我感谢谁能帮助我。在
新答案
您的问题与您的条件过于复杂,您的问题可以简化为:
^{pr2}$旧答案(我认为包括解释所尝试的逻辑仍然有用)
您只需要1的连续区域的累计和,但是,当您到达数据帧的末尾时,您将继续使用其余数据帧的累积和。一种解决方案是计算每组连续1的
cumsum
,然后在最后的检查中使用这个结果。在我还喜欢避免将调用链接到
np.where
,因为np.select
更容易阅读。在相关问题 更多 >
编程相关推荐