pandas python新手。
我有一个带有两列cusips的数据帧(df)。 我想将这些列转换为两列唯一条目的列表。
我的第一次尝试是做以下事情:
cusips = pd.concat(df ['long'],df ['short'])。
返回错误:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()。
我已经阅读了一些帖子,但我仍然遇到麻烦,为什么会出现这种情况。我在这里缺少什么?
此外,选择列或数据框中唯一条目的最有效方法是什么?我可以在一个功能中调用它吗?如果我想创建一个列表或一个新的单库数据框,该功能是否有所不同?
谢谢。
答案 0 :(得分:1)
要获取列中的唯一值,您可以使用unique
Series方法,该方法将返回唯一值的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])
然后appending the resulting two arrays:
In [7]: np.append(df.long.unique(), df.short.unique())
Out[7]: array([1, 2, 4])
使用@ Zalazny7的set
明显更快(因为它只在阵列上运行一次)并且有点令人沮丧,它甚至比np.unique
(对结果数组进行排序!)快得多。
答案 1 :(得分:1)
除了Hayden的回答之外,您还可以使用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