簡體   English   中英

返回每行中組的大小 pandas dataframe

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM