我有一個看起來像這樣的大資料框:
| 國籍 | 性別 | 回復 |
|---|---|---|
| 美國人 | 女性 | 我不需要這個產品。 |
| 德語 | 男性 | 看起來不錯。 |
| 芬蘭 | 女性 | 我肯定會買一個。 |
等等。
我想要做的是從每個組中隨機選擇一些回應,以便我可以進一步分析它們。
我的 groupby 函式回傳了如下內容:
Nationality Sex
American Male 567
American Female 342
German Male 421
German Female 234
Finnish Male 149
Finnish Female 67
等等。
我想要一個新的資料框,每組有 20 個隨機回應。可以使用 lambda 嗎?因為new_df = df.groupby('Nationality')['Sex'].apply(lambda x: x.sample(20))不會回傳我正在尋找的東西。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
使用Pandas 中的 iterrows,您可以將 DataFrame 行作為 (index, Series) 對進行迭代,并得到您想要的:
new_df = df.groupby(['Nationality', 'Sex'], as_index=False).size()
for _, row in new_df.iterrows():
print(df[(df.Nationality==row.Nationality)&(df.Sex==row.Sex)].sample(20))
uj5u.com熱心網友回復:
嘗試:
df_sample = df.groupby(['Nationality', 'Sex']).sample(20)
MVCE:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Col1':np.random.choice([*'ABC'],100),
'Col3':np.arange(100),
'Col2':np.random.randint(1000,5000,100)})
print(df.groupby('Col1').sample(5))
輸出:
Col1 Col3 Col2
83 A 83 1637
58 A 58 4090
17 A 17 4179
86 A 86 3848
74 A 74 2067
49 B 49 4369
50 B 50 4452
42 B 42 4205
7 B 7 2394
54 B 54 3541
40 C 40 3956
67 C 67 4018
9 C 9 4591
48 C 48 1536
26 C 26 2720
uj5u.com熱心網友回復:
您的小組似乎取決于國籍-性別分組。所以也許你正在尋找:
out = df.groupby(['Nationality', 'Sex'])['Response'].apply(lambda x: x.sample(20))
這將從每個國籍-性別組中選擇 20 個回答。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397691.html
