簡體   English   中英

如何計算自列標志以來的天數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM