1

熊猫 python 新手。

我有一个带有两列尖峰的数据框(df)。我想将这些列转换为两列的唯一条目列表。

我的第一次尝试是执行以下操作:

cusips = pd.concat(df['long'], df['short'])。

这返回了错误:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。

我已经阅读了一些帖子,但我仍然不知道为什么会出现这种情况。我在这里想念什么?

另外,在列或数据框中选择唯一条目的最有效方法是什么?我可以在一个函数中调用它吗?如果我想创建一个列表或一个新的单列数据框,函数会有所不同吗?

谢谢你。

4

2 回答 2

1

要获取列中的唯一值,您可以使用uniqueSeries 方法,该方法将返回唯一值的 numpy 数组(而且速度很快!)

df.long.unique()
# returns numpy array of unique values

然后你可以使用numpy.append

np.append(df.long.unique(), df.short.unique())

注意:这只是将两个唯一结果附加在一起,因此本身不是唯一的!

.

这是一个(微不足道的)示例:

import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2], [1, 4]], columns=['long','short'])

In [4]: df
Out[4]: 
   long  short
0     1      2
1     1      4

In [5]: df.long.unique()
Out[5]: array([1])

In [6]: df.short.unique()
Out[6]: array([2, 4])

然后附加生成的两个数组

In [7]: np.append(df.long.unique(), df.short.unique())
Out[7]: array([1, 2, 4])

使用@Zalazny7 的set速度明显更快(因为它只在数组上运行一次),而且有点令人不安的是,它甚至比(对结果数组进行排序!)还要快。np.unique

于 2013-01-02T15:52:26.043 回答
1

除了海登的答案,您还可以使用该set()方法获得相同的结果。如果考虑到这一点,性能会稍微好一些:

In [28]: %timeit set(np.append(df[0],df[1]))
100000 loops, best of 3: 19.6 us per loop

In [29]: %timeit np.append(df[0].unique(), df[1].unique())
10000 loops, best of 3: 55 us per loop
于 2013-01-02T16:01:16.067 回答