我有一个如下定义的数据帧。我想数一数
input
列从1更改为0:
import pandas as pd
df = pd.DataFrame({'input': [1,1,1,0,0,0,1,1,1,0,0,0]},
index=pd.date_range('2021-10-01', periods=12))
# I can mark the points of interest, i.e. when it goes from 1 to 0
df['change'] = 0
df.loc[(df['input'].shift(1) - df['input']) > 0, 'change'] = 1
print(df)
input change
2021-10-01 1 0
2021-10-02 1 0
2021-10-03 1 0
2021-10-04 0 1
2021-10-05 0 0
2021-10-06 0 0
2021-10-07 1 0
2021-10-08 1 0
2021-10-09 1 0
2021-10-10 0 1
2021-10-11 0 0
2021-10-12 0 0
我想要的是一个
res
输出:
input change res
2021-10-01 1 0 0
2021-10-02 1 0 0
2021-10-03 1 0 0
2021-10-04 0 1 1
2021-10-05 0 0 2
2021-10-06 0 0 3
2021-10-07 1 0 0
2021-10-08 1 0 0
2021-10-09 1 0 0
2021-10-10 0 1 1
2021-10-11 0 0 2
2021-10-12 0 0 3
cumsum
但没有找到在适当的点“重置它”的方法:
df['res'] = (1 - df['input']).cumsum()*(1 - df['input'])
但上述情况将继续累积,而不会在何处重置
change == 1