我有一個很大的資料集,我想從中采樣,但有條件。我需要的是一個新的資料框,其值的數量(計數)幾乎與“0 和 1”的布爾列的值相同
我擁有的:
df['target'].value_counts()
0 = 4000
1 = 120000
我需要的:
new_df['target'].value_counts()
0 = 4000
1 = 6000
我知道我可以 df.sample 但我不知道如何插入條件。
謝謝
uj5u.com熱心網友回復:
從 1.1.0 開始,groupby.sample如果每個組需要相同數量的行,您可以使用:
df.groupby('target').sample(4000)
演示:
df = pd.DataFrame({'x': [0] * 10 [1] * 25})
df.groupby('x').sample(5)
x
8 0
6 0
7 0
2 0
9 0
18 1
33 1
24 1
32 1
15 1
如果需要根據組值有條件地采樣,可以執行以下操作:
df.groupby('target', group_keys=False).apply(
lambda g: g.sample(4000 if g.name == 0 else 6000)
)
演示:
df.groupby('x', group_keys=False).apply(
lambda g: g.sample(4 if g.name == 0 else 6)
)
x
7 0
8 0
2 0
1 0
18 1
12 1
17 1
22 1
30 1
28 1
uj5u.com熱心網友回復:
假設以下輸入并使用值 4/6 而不是 4000/6000:
df = pd.DataFrame({'target': [0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1]})
您可以groupby設定目標并sample為每組最多取 N 個值:
df.groupby('target', group_keys=False).apply(lambda g: g.sample(min(len(g), 6)))
示例輸出:
target
4 0
0 0
8 0
12 0
10 1
14 1
1 1
7 1
11 1
13 1
如果你想要相同的尺寸,你可以簡單地使用 df.groupby('target').sample(n=4)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310914.html
上一篇:如何使文本檔案具有相同數量的空格以使其成為字典python
下一篇:如何將字串的格式決議為另一種格式
