使用Pandas使用特定列的权重对DataFrame进行采样

时间:2017-01-08 01:30:12

标签: python pandas dataframe statistics

我有一个DataFrame,它看起来像:

  index  name   city
  0      Yam    Hadera
  1      Meow   Hadera
  2      Don    Hadera
  3      Jazz   Hadera
  4      Bond   Tel Aviv
  5      James  Tel Aviv

我希望Pandas随机选择值,使用city列中的出现次数(使用类型:df.city.value_counts()),所以我的魔术函数的结果,假设:

df.magic_sample(3, weight_column='city')

可能看起来像:

  0     Yam      Hadera
  1     Meow     Hadera
  2     Bond     Tel Aviv

谢谢! :)

2 个答案:

答案 0 :(得分:7)

您可以按city进行分组,然后根据与原始数据框长度相比的长度对每个组进行采样:

df.groupby('city', group_keys=False).apply(lambda g: g.sample(3 * len(g)/len(df)))

enter image description here

答案 1 :(得分:0)

如果我正确理解了这个问题,也许您正在寻找random.sample

>>> import pandas as pd
>>> from random import sample
>>> df = pd.DataFrame(data=[('Yam', 'Hadera'), ('Meow', 'Hadera'), ('Don', 'Hadera'), ('Jazz', 'Hadera'), ('Bond', 'Tel Aviv'), ('James', 'Tel Aviv')], columns=('name', 'city'))
>>> df
    name      city
0    Yam    Hadera
1   Meow    Hadera
2    Don    Hadera
3   Jazz    Hadera
4   Bond  Tel Aviv
5  James  Tel Aviv
>>> df.iloc[sample(range(len(df)), 3), :]
   name      city
4  Bond  Tel Aviv
0   Yam    Hadera
1  Meow    Hadera