[英]Efficiently enumerate rows in bins for each group in DataFrame
我正在嘗試找到一種方法來靈活地更改我為 pandas 數據幀中的每個組設置的行數。
每個組ID
有大約 700 行,我想添加一個名為bin_number
的列,以便從 0 開始重復 0 以達到我想要的 bin 長度,然后bin_number
為 1 並重復 n 次,依此類推。
因此,假設我想要bin_length
為 10,我將有 70 個 bin,並且 bin 編號將跨越 0-69,重復 10 次,從每個ID
組重新開始。 該列將如下所示:
0
0
0 (repeating bin_length number of times)
.
.
1
1
1
另外,如果它可以靈活地適應每組中不同的行數。
這是我一直在使用的方法,但它似乎不是正確的方法。
df.groupby("ID").apply(lambda x: np.arange(len(df)) // 10)
任何指針表示贊賞! 謝謝!
嘗試groupby cumcout
+ //
:
df['bins'] = df.groupby('ID').cumcount() // bin_len
樣本 DF bin 長度為 2:
ID bins
0 1 0
1 1 0
2 1 1
3 1 1
4 1 2
5 1 2
6 1 3
7 1 3
8 2 0
9 2 0
10 2 1
11 2 1
12 2 2
13 2 2
14 2 3
15 2 3
完整的工作示例:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'ID': np.repeat(np.arange(1, 3), 8)
})
bin_len = 2
df['bins'] = df.groupby('ID').cumcount() // bin_len
print(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.