假设我有一个表格,其中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。我将如何实现这一目标?
答案 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()