2016-11-29 257 views
1

我有一個數據幀my_df檢索彙總值:如何在熊貓分組數據幀

id  color 
--------------------  
001  red 
001  blue 
001  yellow 
002  green 
002  black 
003  yellow 
003  white 
003  blue 

然後我做:

grouped_df = my_df.groupby('id') 
a = grouped_df['id'].apply(lambda x: set(x.tolist())) 

然後,如下所示:

id 
-------------------------------- 
001  {red,blue,yellow} 
002  {green,black} 
003  {yellow,white,blue} 

如何循環使用a,以便我可以找到每個ID的對應設置?謝謝!

+1

是不是像'a ['001']'或'[a [i] for i in a.index]'? – Psidom

回答

1

嘗試應用setgroupby

my_df.groupby('id').color.apply(set) 

id 
1  {blue, red, yellow} 
2   {black, green} 
3 {white, yellow, blue} 
Name: color, dtype: object 

解釋
你做了什麼,我所做的是我用精緻的.color分組之間的主要區別然後應用set。這可以確保我在系列上應用set而不是數據框。


如果您分配 groupby的結果給一個變量

...說g

g = my_df.groupby('id').color.apply(set) 

然後每個小組可以通過索引值很容易地引用

g.loc[1] 

{'blue', 'red', 'yellow'} 

可以像這樣循環

for i, v in g.iteritems(): 
    print(i, v) 

1 {'blue', 'red', 'yellow'} 
2 {'black', 'green'} 
3 {'white', 'yellow', 'blue'} 
+0

謝謝。那麼,如何循環查找所有記錄,以便在id = 1時設置值爲{藍色,紅色,黃色},當id = 2時,設置值爲{黑色,綠色} ......等等。 – Edamame

+0

@Edamame我已更新我的帖子 – piRSquared

+0

謝謝!迭代很有效。只是一個小部分:但.apply(set)並不是真的返回一個集合...我的意思是在某些情況下,它具有{'blue','blue','red','yellow'}等重複的項目。是否可以刪除集合中的重複項?謝謝! – Edamame