当前位置:  开发笔记 > 编程语言 > 正文

根据计数从pandas数据帧中选择随机行

如何解决《根据计数从pandas数据帧中选择随机行》经验,为你挑选了1个好方法。

我有一个像下面这样的熊猫数据框:

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"方式吗?



1> MaxU..:

您可以先使用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]

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有