我有一個 df ,它有日期和值為 0 或 1 的索引。我需要在幾個時間段內從這個資料框中過濾每個前 1 例如:
date val ind
2019-08-12 0 0
2019-08-13 1 0
2019-08-14 1 0
2019-08-15 0 1
2019-08-16 1 0
2019-08-19 1 0
2019-08-20 0 0
2019-08-21 1 0
2019-08-22 1 1
2019-08-23 1 0
2019-08-26 0 0
2019-08-27 1 0
2019-08-28 1 0
2019-08-29 0 1
2019-08-30 0 0
df['ind'] 中的每個 1 表示時間段的開始。現在我有興趣獲得每個時間段的前 1 個:
2019-08-16 1 0
2019-08-22 1 1
uj5u.com熱心網友回復:
您可以嘗試計算 1 的數量并在達到 0 時重新啟動并保存下一個 1 的索引
uj5u.com熱心網友回復:
如果我理解正確,您希望獲得每組的第一個“1”。
使用如下資料框查看:
dates val
0 2019-11-29 0
1 2019-12-02 0
2 2019-12-03 1
3 2019-12-04 1
4 2019-12-05 1
5 2020-06-01 0
6 2020-06-02 0
7 2020-06-03 1
8 2020-06-04 1
9 2020-06-05 1
mask = df["val"].ne(df["val"].shift(1)) & df["val"].eq(1)
df.loc[mask]
得到你:
dates val
2 2019-12-03 1
7 2020-06-03 1
我們通過將資料幀向前移動一步并檢查差異來實作這一點。這意味著當前行與當前行不同的任何行都將被匹配:1 是值而 0 是前一個值的情況,或者 0 是值而 1 是前一個值的情況。
然后,我們添加當前行必須等于 1 的另一個條件,這將獲取在 0 之前首先出現 1 的每一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/389522.html
