2013-07-14 54 views
2

我想根據列表從數據框中選擇一些數據。我提到了許多問題,包括this之一。我的'df2'如下:isin按列表檢查 - 熊貓數據框

col1 col2 session_number col3 col4 session 
0 1.1 A    0 1.1 X  1 
1 1.1 A    1 1.7 X  2 
2 1.1 A    2 2.5 Y  3 
3 2.6 B    0 2.6 Y  7 
4 2.5 B    0 3.3 Z  5 

我想將'col2'和'會話'分組到另一個數據框。

df3 = pd.DataFrame({'count' : df2.groupby(["col2","session"]).size()}).reset_index() 

所以我DF3是這樣的:

col2 session count 
0  A  1  1 
1  A  2  1 
2  A  3  1 
3  A  6  1 
4  B  5  1 
5  B  7  1 

現在我想找到會話值,其中COL2 =「d」(這些值是不是在這裏,因爲我已經把唯一的數據幀的一部分)。

li = [] 
li.append(df3[df3.col2 == 'D' ]['session'].values) 

然後我想回去DF2,並獲得在「禮」

會話值對應的「COL1」值

它給出了以下錯誤。

Traceback (most recent call last): 
    File "/home/nilani/Desktop/testingSessions.py", line 40, in <module> 
    print df2[df2['session'].isin(li)]['col1'].unique() 
    File "/usr/local/lib/python2.7/dist-packages/pandas-0.11.0-py2.7-linux-x86_64.egg/pandas/core/series.py", line 2785, in isin 
    value_set = set(values) 
TypeError: unhashable type: 'numpy.ndarray' 

但是,如果我使用'li'中的值如下,它不會給出任何錯誤並正確打印輸出。

print df2[df2['session'].isin([ 4, 10])]['col1'].unique() 

這裏有什麼問題?

回答

1

這是因爲李是包含數組列表:

li == [array([4, 10])] 

目前,尋找isin李試圖看看是否有有4個和10個(而不是包含在其中)的陣列。事實上,這更糟糕,因爲即使看看李在是否會產生錯誤。

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

你想要更簡單:

li == array([4, 10]) 

也就是說

li = df3[df3.col2 == 'D' ]['session'].unique() # or values 

然而,在以前的問題是由COL2分組,因此這是要獲得你的會話值完全一樣:

df[df['col2'] == 'D']['col1'].unique() 
+0

非常感謝.. :)。我想這太過分了。 –