获取一行中的所有唯一值

10

我有一个DataFrame叫做df1,长这样:

A       B       C
-----------------
1       1       2
2       2       3
5       4       9
我想获取一行中的所有唯一值。例如第一行中的1和2,第二行中的2、3和第三行中的4、5和9。
结果可能会有所变化,我可以想象一个包含唯一值列表的新列,或者用None替换重复项也可以(或其他什么方式,也许有更适合这种情况的Pythonic方式)。

你想要什么输出格式?有一个numpy函数numpy.unique()可以应用于所有行。 - pault
3个回答

20
list(map(set,df.values))
Out[72]: [{1, 2}, {2, 3}, {4, 5, 9}]

这个肯定会非常快。 - Bharath M Shetty
@Bharath 应该很快,我想:-) - BENY
不如映射集合快 :) 你的是最快的 - Bharath M Shetty
1
我对这个解决方案的问题在于它改变了值出现的顺序,而 lambda 的解决方案则没有。 - Eduardo EPF

8
In [88]: df.stack().groupby(level=0).apply(lambda x: x.unique().tolist())
Out[88]:
0       [1, 2]
1       [2, 3]
2    [5, 4, 9]
dtype: object

1
即使是 df.apply(lambda x: list(set(x)), axis = 1) 也可以工作。 - Vaishali
@Vaishali,太好了!请把它变成一个答案! - MaxU - stand with Ukraine
1
先生,我的答案怎么样了? - Bharath M Shetty
@Vaishali,是的,Wen的解决方案非常优雅! - MaxU - stand with Ukraine

8

让我们使用pd.unique,即

df.T.agg([pd.unique])

        0       1          2
unique  [1, 2]  [2, 3]  [5, 4, 9]

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