2013-01-02 79 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更快(將得到的陣列排序!)

相關問題