2014-09-23 124 views
2

后一组的专栏中,我有一个简单的熊猫数据框命名purchase_cat_df的名字:大熊猫,按功能

   email    cat 
0 [email protected] Mobiles & Tablets 
1 [email protected] Mobiles & Tablets 
2 [email protected] Mobiles & Tablets 
3 [email protected] Mobiles & Tablets 
4 [email protected]  Home & Living 
5 [email protected]  Home & Living 

我被“电子邮件”和分组,并把“猫”在列表中这样:

test = purchase_cat_df.groupby('email').apply(lambda x: list(x.cat)) 

但后来我的数据帧的测试是:

email 
[email protected] [Mobiles & Tablets, Mobiles & Tablets, Home & ... 
[email protected]         [Mobiles & Tablets] 
[email protected]     [Mobiles & Tablets, Home & Living] 

我失去了指数法和名字,我怎么能评为第2列?

+0

我想你会得到一个系列,而不是一个DataFrame。 – BrenBarn 2014-09-23 18:45:59

+0

我不确定你的目标是什么,但我建议调用'purchase_cat_df = purchase_cat_df.set_index('email')'然后你可以通过调用'purchase_cat_df.loc [emailX,'cat']来获得你的列表。没有tolist()的tolist()'调用返回一个系列 – ZJS 2014-09-23 19:07:28

+1

显然,索引不再有意义,因为每条输出行都是由具有不同索引的多条输入行生成的。 – mdurant 2014-09-23 19:49:08

回答

0

由于@BrenBarn在评论中提到,带有列表的列没有名称,因为您有Series而不是DataFrame

试试这个:

test = purchase_cat_df.groupby('email').apply({'cat': list}) 

它返回一个DataFrameemail设置为索引和cat作为新列的名称。

当您想要聚合多个列时,您也可以使用它。见the documentation有几个例子。

2

如果你想保持原来的指标,你可能寻找的是这样的:

purchase_cat_df.groupby('email', as_index=False) 

as_index =假保持原有指数。然后,您可以继续按名称对列进行处理。