大熊猫数据框的两列 - Python中的Concat

时间:2013-01-02 15:37:08

标签: python pandas

pandas python新手。

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

我的第一次尝试是做以下事情:

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

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

我已经阅读了一些帖子,但我仍然遇到麻烦,为什么会出现这种情况。我在这里缺少什么?

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

谢谢。

2 个答案:

答案 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