[英]return size of the group in each row of a pandas dataframe
我想在 dataframe 中返回高於目標值的每次運行的大小,到目前為止,我只設法返回使用的組大小的運行計數
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 |
您可以創建一個 boolean 列'foo'
,如果value > target
False,則該列評估 True。 然后groupby
"foo" 並在每個組的 "foo" 列上調用sum
function(注意 True=1 和 False=0):
df['result'] = df.assign(foo=df['value'].gt(df['target'])).groupby('foo')['foo'].transform('sum')
Output:
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
讓我們通過在 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)
)
output
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.