如何对两个字段进行分组并将索引设置为两个字段之一。熊猫,Python-3

时间:2018-07-26 17:47:46

标签: python python-3.x pandas group-by

我是Stack Overflow的新手,所以也欢迎任何社区最佳实践。

#aggregate rides and average of fares
combo_grouped_df =combo_df.groupby(['city','type'])
#combo_grouped_df.set_index('city') does not work! 

combo_grouped_df.head()

avg_fare =combo_grouped_df['fare'].mean()
total_rides =combo_grouped_df['ride_id'].count()
city_type = combo_grouped_df['type']

summary_df = pd.DataFrame({"Average Fare": avg_fare,
                        "Number of Rides": total_rides,
                        "Type": combo_grouped_df['type']}) # how to get type in this dict?????
summary_df.head()}

结果:

                        Average Fare  Number of Rides  \
city          type                                      
Amandaburgh   Urban        24.641667               18   
Barajasview   Urban        25.332273               22   
Barronchester Suburban     36.422500               16   
Bethanyland   Suburban     32.956111               18   
Bradshawfurt  Rural        40.064000               10   

                                                                     Type  
city          type                                                         
Amandaburgh   Urban     ((Amandaburgh, Urban), [Urban, Urban, Urban, U...  
Barajasview   Urban     ((Barajasview, Urban), [Urban, Urban, Urban, U...  
Barronchester Suburban  ((Barronchester, Suburban), [Suburban, Suburba...  
Bethanyland   Suburban  ((Bethanyland, Suburban), [Suburban, Suburban,...  
Bradshawfurt  Rural     ((Bradshawfurt, Rural), [Rural, Rural, Rural, ... 

我想将goupby的“类型”索引移到“类型”所在的列。或者,将“类型”显示为没有括号的单个字符串(例如“城市”)。

df.set_index = False不起作用,因为我想保留'city'索引。 groupby的groupby似乎也不起作用。 任何帮助将不胜感激。

为清楚起见进行编辑:我希望对“城市”进行分组并将其用作索引。我想在数据框中而不是在索引中有“类型”。当前,“类型”返回的值列表基本上是重复的相同值。

1 个答案:

答案 0 :(得分:1)

您需要的是:

import pandas as pd

# Group it
group_df = combo_df.groupby(['city','type'])
# Aggregate it
aggregated_df = group_df.agg({'fare': 'mean', 'ride_id': 'count'})
# Reset index (only type)
summary_df = aggregated_df.reset_index(level=1)