我想回傳每個運行的大小高于資料框中的目標值,到目前為止,我只設法回傳使用的組大小的運行計數
df.groupby((df["value"] < df["target"]).cumsum()).cumcount()
| 價值 | 目標 | 當前代碼結果 | 期望的結果 |
|---|---|---|---|
| 5 | 5 | 0 | 0 |
| 6 | 5 | 1 | 3 |
| 7 | 5 | 2 | 3 |
| 6 | 5 | 3 | 3 |
| 5 | 5 | 0 | 0 |
uj5u.com熱心網友回復:
讓我們通過在 df 中運行兩次來使這更有趣:
df = pd.DataFrame(columns = ['value','target'], data = [[5, 5],
[6, 5],
[7, 5],
[6, 5],
[5, 5],
[6, 5],
[7, 5],
[6, 5],
[5, 5],
])
然后我們對標記運行開始和結束的兩個條件的組合進行分組,并計算運行中的長度,將其分配給runcount:
(df.groupby(
[(df['value'] <= df['target']).cumsum(),
df['value'] > df['target']
])
.apply(lambda g: g.assign(runcount = (g['value']>g['target']).sum()))
.reset_index(drop = True)
)
輸出
value target runcount
-- ------- -------- ----------
0 5 5 0
1 6 5 3
2 7 5 3
3 6 5 3
4 5 5 0
5 6 5 3
6 7 5 3
7 6 5 3
8 5 5 0
uj5u.com熱心網友回復:
您可以創建一個布爾列'foo',如果value > target否則為 False ,則計算 True 。然后groupby“foo”并呼叫sum每個組中“foo”列上的函式(注意 True=1 和 False=0):
df['result'] = df.assign(foo=df['value'].gt(df['target'])).groupby('foo')['foo'].transform('sum')
輸出:
value target current code result desired result result
0 5 5 0 0 0
1 6 5 1 3 3
2 7 5 2 3 3
3 6 5 3 3 3
4 5 5 4 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409853.html
標籤:
上一篇:計算特定日期有多少不同的用戶
