2017-05-25 71 views
1

我正在寻找一种方法在熊猫聚集找到一列的价值,基于其他列的价值。基于其他列使用熊猫聚合的结果

例如: 我有以下的数据帧

df = pd.DataFrame({"Project":['A','B','C','D','E'], 
        "Country" :['Brazil','Brazil','Germany','Germany','Argentina'],\ 
        "Value":[12,11,14,15,18]}) 

     Country Project Value 
0  Brazil  A  12 
1  Brazil  B  11 
2 Germany  C  14 
3 Germany  D  15 
4 Argentina  E  18 

我创造了这个聚集:

aggregations = {'Project':{'Number of projects':'count'}, 
       'Value':{'Mean':'mean', 
         'Max':'max', 
         'Min':'min'}} 

df.groupby(['Country']).agg(aggregations) 

我想补充到这个集合的一个新列至极会给作为导致的项目名称最大值为 '值'被观察到。意图结果将如下所示:

    Project Value   
      Number of Projects Mean Max Min Projec_Max Projec_Min 
Country       
Argentina     1 18.0 18 18   E   E   
Brazil      2 11.5 12 11   A   B 
Germany      2 14.5 15 14   D   C 

如何在汇总字典中实现此操作?

在此先感谢

回答

0

不知道这是最好的方式,但它似乎工作:

aggregations = {'Project':{'Number of projects':'count'}, 
       'Value':{'Mean':'mean', 
         'Max':'max', 
         'Min':'min', 
         'Project_Max': lambda x: df['Project'][x.idxmax()], 
         'Project_Min': lambda x: df['Project'][x.idxmin()]}} 
df.groupby(['Country']).agg(aggregations) 

结果:

   Value          Project 
      Project_Max Project_Min Max Mean Min Number of projects 
Country               
Argentina   E   E 18 18.0 18     1 
Brazil    A   B 12 11.5 11     2 
Germany    D   C 15 14.5 14     2 
+0

谢谢,jdehesa。 – Carlos