2016-05-13 74 views
2

相關聯。如果我有這樣(很小的例子)一個數據幀查找交叉口唯一值的另一列熊貓

col1 col2 
0 a  1 
1 a  2 
2 b  1 
3 b  2 
4 b  4 
5 c  1 
6 c  2 
7 c  3 

,我希望所有col2值的十字路口時,他們與它們獨特的col1值有關(因此在這種情況下,十字路口將是[1,2]),那麼如何用熊貓來做到這一點?另一種說法是,col2中的值存在於col1中的每個唯一值中。

我()溶液與unique獲得獨特col1元件,然後生成從每個獨特元件的字典中col1然後取這些字典值的交集。我覺得我應該使用一種機制將列聯繫在一起,但這可以使這更容易。

回答

2

一種方法是使用pivot_table

In [11]: cross = df.pivot_table(index="col1", columns="col2", aggfunc='size') == 1 

In [12]: cross 
Out[12]: 
col2  1  2  3  4 
col1 
a  True True False False 
b  True True False True 
c  True True True False 

In [13]: cross.all() 
Out[13]: 
col2 
1  True 
2  True 
3 False 
4 False 
dtype: bool 

In [14]: cross.columns[cross.all()] 
Out[14]: Int64Index([1, 2], dtype='int64', name='col2') 
+1

現在我最終會花一些時間被迷住了'pivot_table'。非常感謝。 –

1

另一種解決方案:

print df.pivot_table(index="col1", columns="col2", aggfunc=len) 
col2 1 2 3 4 
col1      
a  1.0 1.0 NaN NaN 
b  1.0 1.0 NaN 1.0 
c  1.0 1.0 1.0 NaN 

ser = (df.pivot_table(index="col1", columns="col2", aggfunc=len) == 1).all() 
print ser.index[ser] 
Int64Index([1, 2], dtype='int64', name=u'col2') 
+0

這對學習的目的也有幫助,謝謝! –