簡體   English   中英

Pandas 中不成比例的分層抽樣

[英]Disproportionate stratified sampling in Pandas

如何從以下數據框中的每組(列Name )中隨機選擇一行:

   Distance   Name  Time  Order
1        16   John     5      0
4        31   John     9      1
0        23   Kate     3      0
3        15   Kate     7      1
2        32  Peter     2      0
5        26  Peter     4      1

預期結果:

Distance   Name  Time  Order

4        31   John     9      1
0        23   Kate     3      0
2        32  Peter     2      0

您可以在Name col 上使用groupby並應用sample

df.groupby('Name',as_index=False).apply(lambda x:x.sample()).reset_index(drop=True)

    Distance   Name  Time  Order
0        31   John     9      1
1        15   Kate     7      1
2        32  Peter     2      0

例如,您可以使用numpy函數random.permutation對所有樣本進行混洗。 然后groupbyName和取N從每組第一行:

df.iloc[np.random.permutation(len(df))].groupby('Name').head(1)

你可以使用unique

df['Name'].unique()

打亂數據幀:

df.sample(frac=1)

然后刪除重復的行:

df.drop_duplicates(subset=['Name'])
df.drop_duplicates(subset='Name')



   Distance   Name  Time  Order
1        16   John     5      0
0        23   Kate     3      0
2        32  Peter     2      0

這應該會有所幫助,但這不是隨機選擇,它保留了第一個

如何使用隨機

像這樣,

導入您提供的數據,

df=pd.read_csv('random_data.csv', header=0)

看起來像這樣,

Distance  Name  Time  Order
1        16  John     5      0
4         3  John     9      1
0        23  Kate     3      0
3        15  Kate     7      1

然后得到一個隨機的列名,

colname = df.columns[random.randint(1, 3)]

並在其下方選擇“名稱”,

   print(df[colname])
1    John
4    John
0    Kate
3    Kate
Name: Name, dtype: object

當然,我可以將其濃縮為,

print(df[df.columns[random.randint(1, 3)]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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