2016-05-11 98 views
3

試圖看看這與熊貓有多麼困難或容易。熊貓創建多個聚合

比方說,一個人的數據如兩列:

Cat1 Cat2 
A  1 
A  2 
A  3 
B  1 
B  2 
C  1 
C  2 
C  3 
D  4 

正如你看到的AC有三個共同的要素1, 2, 3B但是隻有兩個元素1和2. D只有一個元素:4.

編程方式如何得到相同的結果。這個想法將會讓每個組都以某種方式返回。所以一個是[A, C][1, 2, 3],然後[B][1, 2][D][4]

我知道可以編寫一個程序來做到這一點,所以我試圖找出是否有任何關於熊貓的東西,而不必從頭開始構建東西。

謝謝!

回答

0

你還可以:

df = df.set_index('Cat1', append=True).unstack().loc[:, 'Cat2'] 
df = pd.Series({col: tuple(values.dropna()) for col, values in df.items()}) 
df = df.groupby(df.values).apply(lambda x: list(x.index)) 

得到

    Cat1 
(1.0, 2.0)   [B] 
(1.0, 2.0, 3.0) [A, C] 
(4.0,)    [D] 
3

您可以使用groupby兩次來實現這一目標。

df = df.groupby('Cat1')['Cat2'].apply(lambda x: tuple(set(x))).reset_index() 
df = df.groupby('Cat2')['Cat1'].apply(lambda x: tuple(set(x))).reset_index() 

我使用tuple因爲熊貓需要的元素是爲了做一個groupby哈希的。上面的代碼不區分(1, 2, 3)(1, 1, 2, 3)。如果您想作出區分,請將set替換爲sorted

所得輸出:

 Cat2 Cat1 
0  (1, 2) (B,) 
1 (1, 2, 3) (A, C) 
2  (4,) (D,)