2017-02-22 34 views
1

给定一个数据帧df,我可以通过柱获得B列分组的两个组的大小和分钟A

df.groupby(['columnA']).size() 

和各组内与塔B的mimimun值获得组通过柱A中的大小

df.groupby(['columnA']).agg({'columnB':min}) 

或(语法糖我猜)

df.groupby(['columnA'])['columnB'].min() 

,但我怎么能OBT直接使用这两列的DataFrame?

在SQL中,如果你熟悉它,这将是您的任何线索就这么简单

SELECT count(columnA), min(columnB) FROM table GROUP BY columnA 

感谢。

回答

1

将它们都放在agg应该工作,因为agg允许列出的功能。

>>> df 
    columnA columnB columnC 
0 cat1  3  400 
1 cat1  2  20 
2 cat1  5  3029 
3 cat2  1  492 
4 cat2  4  30 
5 cat3  2  203 
6 cat3  6  402 
7 cat3  4  391 

>>> df.groupby(['columnA']).columnB.agg(['size', 'min']) 
     size min 
columnA   
cat1  3 2 
cat2  2 1 
cat3  3 2 

>>> df.groupby(['columnA']).agg(['size', 'min']) 
     columnB  columnC  
      size min size min 
columnA       
cat1   3 2  3 20 
cat2   2 1  2 30 
cat3   3 2  3 203 

agg也接受列的字典 - >功能,所以是你想要映射到每个列的函数独立,你可以用的东西这样做(这里没有必要)像

df.groupby(['columnA']).agg({'columnA':'size','columnB':'min‌​'}) 
+0

我认为你的第一个答案'df.groupby(['columnA'])。agg({'columnA':'size','columnB':'min'})'在现实世界中更普遍和有用。我会建议将其添加回来。 – mmj

+0

@mmj当然,我可以添加关于使用字典的blurb。 – miradulo

+0

您可能有兴趣处理此问题的后续处理:http://stackoverflow.com/q/42399574/694360 – mmj