按列值从大熊猫数据框中获取随机样本

时间:2019-10-23 07:13:17

标签: python pandas csv

我有一个熊猫数据框,如下所示:

#       Name        City
1       John        NYC
2       Doe         Berlin
3       Jonathan    Tokyo
4       Andrew      Barcelona
5       Heather     London
..      ......      ......
..      ......      ......
..      ......      ......
60000   Summer      Madrid

让我们说我有一个像这样的城市列表:[NYC, Berlin, Tokyo]

我需要获取上述数据框的样本,其大小为n(例如n = 200),该样本随机但根据列表中的城市选择行。最好每个城市的行数相同。

如何使用熊猫来做到这一点?

谢谢

3 个答案:

答案 0 :(得分:1)

这是一个两步过程。

首先根据您的城市创建一个子集

subset_DF = DF[DF.cities.isin(['NYC', 'Berlin','Tokyo'])]

然后使用pandas DataFrame方法创建示例

your_Sample = subset_DF.sample(n = 200)

或内联

your_Sample = DF[DF.cities.isin(['NYC', 'Berlin','Tokyo'])].sample(n = 200)

答案 1 :(得分:0)

不确定这是否最有效,但我是这样做的:

假设您想要每个城市 N 随机行。您可以在唯一的城市名称上运行 for 循环并获取每个城市名称的数据框子集,并从此子集中采样。在您的情况下,这看起来像这样:

df_list = list()
for city_name in df['City'].unique():
    df_subset = df.loc[df['City'] == city_name]
    df_list.append(df_subset.sample(N))
df_sample = pd.concat(df_list).reset_index(drop=True)

答案 2 :(得分:-1)

sub_sample = df [df ['City'] ==“ NYC”]#选择所有带有“ city” ==“ NYC”的行

sub_sample.iloc [0:20 ,:]#假设您需要提取20行

以相同的方式选择其他两个样本。