[英]python pandas - creating a column which keeps a running count of consecutive values
我正在嘗試創建一個列(“consec”),它將在不使用循環的情況下在另一個(“二進制”)中保持連續值的運行計數。 這就是期望的結果:
. binary consec
1 0 0
2 1 1
3 1 2
4 1 3
5 1 4
5 0 0
6 1 1
7 1 2
8 0 0
但是,這......
df['consec'][df['binary']==1] = df['consec'].shift(1) + df['binary']
導致這...
. binary consec
0 1 NaN
1 1 1
2 1 1
3 0 0
4 1 1
5 0 0
6 1 1
7 1 1
8 1 1
9 0 0
我看到其他帖子使用分組或排序,但不幸的是,我看不出這對我有用。 在此先感謝您的幫助。
您可以使用compare-cumsum-groupby模式(我真的需要編寫文檔),並使用最終的cumcount
:
>>> df = pd.DataFrame({"binary": [0,1,1,1,0,0,1,1,0]})
>>> df["consec"] = df["binary"].groupby((df["binary"] == 0).cumsum()).cumcount()
>>> df
binary consec
0 0 0
1 1 1
2 1 2
3 1 3
4 0 0
5 0 0
6 1 1
7 1 2
8 0 0
這是有效的,因為首先我們得到我們想要重置計數器的位置:
>>> (df["binary"] == 0)
0 True
1 False
2 False
3 False
4 True
5 True
6 False
7 False
8 True
Name: binary, dtype: bool
這些累積總和為我們提供了每個組的不同ID:
>>> (df["binary"] == 0).cumsum()
0 1
1 1
2 1
3 1
4 2
5 3
6 3
7 3
8 4
Name: binary, dtype: int64
然后我們可以將它傳遞給groupby
並使用cumcount
在每個組中獲得增加的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.