【发布时间】:2019-09-13 00:01:44
【问题描述】:
我找不到任何解决此问题的方法; this is the closest I guess, but I can't figure out how to implement the ideas here.
不知何故,我发现自己正在查看这样的数据框:
data = [['apple', 'banana','pear','mango'], ['pasta', 'pasta','pasta','pasta'], ['onion', 'tomato','celery','potato'], ['dog', 'dog','dog','dog']]
df = pd.DataFrame(data)
df
哪些输出:
0 1 2 3
0 apple banana pear mango
1 pasta pasta pasta pasta
2 onion tomato celery potato
3 dog dog dog dog
第 2 行和第 4 行在所有 4 列中具有相同的值,我想去掉它们,所以最终的 df 看起来像这样:
0 1 2 3
0 apple banana pear mango
1 onion tomato celery potato
使用drop_duplicates() 不会做任何事情,因为没有重复的行。与duplicated() 相同。
以下是我能想到的唯一想法(如果你可以这么说的话)。如果我跑
df.transpose()
我明白了
0 1 2 3
0 apple pasta onion dog
1 banana pasta tomato dog
2 pear pasta celery dog
3 mango pasta potato dog
现在如果我在第四列运行duplicated():
df.duplicated(3)
我明白了
0 False
1 True
2 True
3 True
dtype: bool
所以也许我可以想出一个可以转置df的函数,在每一列上运行duplicated(),如果除第一个以外的所有值都以True返回,然后将df转回恢复原状。
但我不知道该怎么做;另外,我很想知道是否有更优雅的方式可以到达同一个地方。
【问题讨论】:
-
你可以使用:
df[df.nunique(1)>1] -
@anky_91 - 哇,这既快速又正确!您能否解释一下,对于我们这些仍然在使用 pandas 的人(最好在答案中),这是如何完成任务的?
-
@rafaelc - 你在这两个方面都是对的。
df.nunique更优雅,但在其他情况下,跨列测试duplicated()的能力可能会派上用场! -
根据要求,我发布了一个带有详细解释的答案。我试过了,如果有不清楚的地方请告诉我