Pandas:数据框唯一值

46

我有一个包含重复行的 DataFrame,我希望得到一个唯一索引且无重复的 DataFrame。可以丢弃重复值。这个操作可以通过 groupby 实现吗?

2个回答

85
In [29]: df.drop_duplicates()
Out[29]: 
   b  c
1  2  3
3  4  0
7  5  9

值得注意的是,这将获取第一个或最后一个出现的条目。因此,如果你很幸运,你需要先按某些其他量进行排序,否则就要使用一些复杂的groupby逻辑。 - ely
2
这是错误的。drop_duplicates仅作用于值(至少在我使用的版本中)。如果您想在索引和值上进行删除,则需要重置索引,或者如果您想要一个唯一的索引,则只需使用索引即可。也许除了groupby之外还有其他方法可以强制使用唯一索引? - mathtick
1
如果您不想分配新变量,请使用 df.drop_duplicates(inplace=True) - Flavian Hautbois
这并不会生成一个具有唯一索引的数据框,然而下面@Adam Greenhall提供的解决方案可以解决这个问题。 - dashesy

11

通过阅读split-apply-combine文档示例,找到了一种方法来实现它。

df = pandas.DataFrame({'b':[2,2,4,5], 'c': [3,3,0,9]}, index=[1,1,3,7])
df_unique = df.groupby(level=0).first()

df
   b  c
1  2  3
1  2  3
3  4  0
7  5  9

df_unique
   b  c
1  2  3
3  4  0
7  5  9

这取决于行索引在数据字段(b,c)重复的行中被复制,有效地将索引作为您想要成为唯一(不重复)的行向量的一部分。 - hobs
4
如果您有重复的索引条目,这就是您需要的答案。 - rogueleaderr
当我在MultIndex上执行unstack时,出现了ValueError: Index contains duplicate entries, cannot reshape的错误,但是这个解决方案对此有效,只需要执行df_unique = df.groupby(level=[0,1]).first()即可。 - dashesy

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