簡體   English   中英

有效枚舉 DataFrame 中每個組的 bin 中的行

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

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