我有一个像下面这样的熊猫数据框:
col1, col2, label a, b , cat b, b1, , mouse . . .........., elephant .........., mouse
和value_counts
标签栏:
df.dataframe.value_counts: cat: 7599 mouse: 6458 dog: 5100 elephant: 5000
我想随机从每个标签类别中选择至少N行,以便我的value_counts变为:
cat: N mouse: N dog: N elephant: N
有这种做法的"pandoic"方式吗?
您可以先使用sample(frac = 1)方法对DF进行洗牌,然后从每个组中挑选前N行(分组label
):
df.sample(frac=1).groupby('label', sort=False).head(N)
演示:
In [108]: df.sample(frac=1).groupby('label', sort=False).head(3) Out[108]: col1 label 11 9 a 28 4 a 58 0 a 96 5 c 99 3 b 35 6 c 88 8 c 97 9 b 83 7 b
建立:
In [106]: df = pd.DataFrame({'label':np.random.choice(list('abc'), 100), 'col1':np.random.randint(0, 10, 100)}) In [107]: df Out[107]: col1 label 0 4 c 1 6 b 2 9 c 3 0 b 4 5 a 5 3 a 6 3 b 7 6 c 8 7 b 9 6 a .. ... ... 90 4 b 91 5 b 92 8 c 93 2 c 94 9 a 95 2 a 96 5 c 97 9 b 98 8 b 99 3 b [100 rows x 2 columns]
提示:如果你想找到最大可能的N - 你可以使用下面的代码(感谢@NickilMaveli的想法)
N = df.label.value_counts(sort=False).min() # (or) df.label.value_counts().iloc[-1]