我有一个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
谢谢! :)
答案 0 :(得分:7)
您可以按city
进行分组,然后根据与原始数据框长度相比的长度对每个组进行采样:
df.groupby('city', group_keys=False).apply(lambda g: g.sample(3 * len(g)/len(df)))
答案 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