从Pandas

时间:2017-11-13 19:22:41

标签: python pandas dataframe

假设我有一个表格,其中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 个答案:

答案 0 :(得分:3)

首先对DataFrame进行随机播放,然后删除重复项:

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

如果行的顺序很重要,您可以使用sort_index作为@cᴏʟᴅsᴘᴇᴇᴅ建议:

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