python pandas: 按 cumsum 定义的值对时间序列进行分组,如果达到该值则重置总和
python pandas: group time series by cumsum defined value, reset sum if value is reached
我有一个包含 A 列和 B 列的数据框。
期望的结果:
如果 B 的 cumsum 达到值 >=15,则应计算 0 和 cumsum >=15 之间的行的以下操作: df["Amean"] =df["A"].mean() 和 df[ "Bsum15"] = df["B"].sum() ;
然后 cumsum 应再次重置为 0 并继续循环。
example
类似主题:
Python pandas cumsum() reset after hitting max
假设,我们举一个更简单的例子
df=pd.DataFrame([1,2,3,4,5,6,7,8,9,10],columns=['B'])
def accum(vals):
acc=0
for i in vals:
acc+=i
if acc>=15:
yield acc
acc=0
else:
yield np.nan
df['accu']=list(accum(df['B'].values))
returns
B accu
0 1 NaN
1 2 NaN
2 3 NaN
3 4 NaN
4 5 15.0
5 6 NaN
6 7 NaN
7 8 21.0
8 9 NaN
9 10 19.0
我有一个包含 A 列和 B 列的数据框。 期望的结果: 如果 B 的 cumsum 达到值 >=15,则应计算 0 和 cumsum >=15 之间的行的以下操作: df["Amean"] =df["A"].mean() 和 df[ "Bsum15"] = df["B"].sum() ; 然后 cumsum 应再次重置为 0 并继续循环。
example
类似主题:
Python pandas cumsum() reset after hitting max
假设,我们举一个更简单的例子
df=pd.DataFrame([1,2,3,4,5,6,7,8,9,10],columns=['B'])
def accum(vals):
acc=0
for i in vals:
acc+=i
if acc>=15:
yield acc
acc=0
else:
yield np.nan
df['accu']=list(accum(df['B'].values))
returns
B accu
0 1 NaN
1 2 NaN
2 3 NaN
3 4 NaN
4 5 15.0
5 6 NaN
6 7 NaN
7 8 21.0
8 9 NaN
9 10 19.0