2013-01-02 49 views
1

新的熊猫python。熊猫数据框的两列 - Python中的Concat

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

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

cusips = pd.concat(DF [ '长'],DF [ '短'])。

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

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

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

谢谢。

回答

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 
+0

set绝对是这里的一种方式,我很沮丧它比'numpy.unique'(哪种)更快! –

+0

快速跟进。 Set是全部还是仅仅是df [0]和df [1]的唯一。我假设唯一的唯一。 对此的任何想法: 这将返回错误:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()。 我该怎么做? – user1911092

+0

尝试在[]中附上你的系列:cusips = pd.concat([df ['long'],df ['short']])) – Zelazny7

1

要获得列中的唯一值,您可以使用unique系列方法,该方法将返回唯一值(且速度很快!)的一个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是显著快(因为它运行在阵列上只有一次),有点upsettingly它甚至比np.unique更快(将得到的阵列排序!)

相关问题