2016-11-29 203 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