在Pandas中从数据框中随机选择唯一行

6

假设我有一个数据框,其形式为rn是行索引

       A1  |  A2 |  A3 
      -----------------
r1     x   |  0  |  t
r2     y   |  1  |  u
r3     z   |  1  |  v
r4     x   |  2  |  w
r5     z   |  2  |  v
r6     x   |  2  |  w

如果我想对这个数据框进行子集操作,使得A2列只有唯一值,我会使用df.drop_duplicates('A2')。然而,这样做只会保留每个唯一值的第一行并删除其余行。在这个例子中,只有r2和r4会被保留在子集中。

我希望的是,任何具有重复值的行都是随机选择而不是选择第一行。所以在这个例子中,对于A2 == 1,r2或r3将随机选择,对于A2 == 2,r4、r5或r6中的任意一个将随机选择。我该如何实现这个功能?

1个回答

8

首先对数据框进行随机排序,然后再去除重复项:

df.sample(frac=1).drop_duplicates(subset='A2')

如果行的顺序很重要,您可以像@cᴏʟᴅsᴘᴇᴇᴅ建议的那样使用sort_index:
df.sample(frac=1).drop_duplicates(subset='A2').sort_index()

如果您想保留顺序,通常会在之后对索引进行排序。 - cs95
@cᴏʟᴅsᴘᴇᴇᴅ 好的,让我添加一下。 - ayhan
哇,那真是太简单了,谢谢。 - HMK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接