我在資料框中有一個布林值True/False列“ Mask”,例如:
Mask
True
True
True
False
False
True
False
False
現在我正在嘗試添加一個包含連續True/False行計數的列,其中True是正和( 1 的計數),False是負和(-1 的計數),例如
Mask Count
True 3
True 3
True 3
False -2
False -2
True 1
False -2
False -2
我試過了groupby,sum但現在我腦子里打了一個結。
嘗試過類似的東西
mask.groupby((~mask).cumsum()).cumsum().astype(int)
(mask是True/的條件False) 但這僅計算 Trues 并進行計數而不是顯示總和。
真的很感激任何建議!
uj5u.com熱心網友回復:
可以得到連續的組號True/ Falseby.cumsum()并放入g.
然后,分組g并通過.transform() 獲取每個組的大小/計數.size()。通過乘以 的回傳值(1或-1)來設定符號np.where(),如下所示:
g = df['Mask'].ne(df['Mask'].shift()).cumsum()
df['Count'] = df.groupby(g)['Mask'].transform('size') * np.where(df['Mask'], 1, -1)
結果:
print(df)
Mask Count
0 True 3
1 True 3
2 True 3
3 False -2
4 False -2
5 True 1
6 False -2
7 False -2
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336095.html
上一篇:使用10個前一個和下一個值之間的平均值替換pandas資料幀中的特定值
下一篇:嘗試將資料框過濾為具有特定值的行
