[英]How to count the number of days since a column flag?
我有一個定義如下的數據框。 當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
重置
我們只能創建一個布爾系列,其中input
eq
0
然后按連續值分組並采用布爾系列的groupby cumsum
。 這本質上是枚舉組,但僅限於input
中有 0 的組。
0
:
m = df['input'].eq(0)
df['res'] = m.groupby(m.ne(m.shift()).cumsum()).cumsum()
df
:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.