Python 函数与 pandas groupby&aggregate 一起使用

Python function used with pandas groupby&aggregate

我正在玩数据分析,使用来自 kaggle 的 imdb 数据集。

我将几个功能分组如下:

color = df_q6.groupby('color', as_index=False).agg(profit_margin_mean=('profit_margin', 'mean'), \
                                               year_mean=('title_year', 'mean'), \
                                              critic_mean=('num_critic_for_reviews', 'mean'), \
                                              duration_mean=('duration', 'mean'), \
                                              cast_fb_mean=('cast_total_facebook_likes', 'mean'), \
                                              user_review_mean=('num_user_for_reviews', 'mean'), \
                                              imdb_mean=('imdb_score', 'mean')).round(2)

我正在尝试定义一个函数来简化此类分组。

到目前为止我已经这样做了:

def group_by_label(dataset, label, columns=[]):
   agg_list = []
   for i in columns:
       agg_list.append("%s=(%s, 'mean')" % (i, i))
   grouped = dataset.groupby(label, as_index=False).agg(*[x for x in agg_list])
   return grouped

哪个returns这个:

AttributeError: 'profit_margin=(profit_margin, 'mean')' is not a valid function for 'DataFrameGroupBy' object

我曾假设(错误地)这个函数至少应该在 columns 只有 1 个项目时起作用。

能否请您建议我如何完成这项工作?

谢谢。

你想使用 .agg() 函数,它需要一个字典,其中列名作为键,所需的聚合函数作为值,所以你的聚合函数:

color = df_q6.groupby('color', as_index=False).agg(profit_margin_mean=('profit_margin', 'mean'), \
                                               year_mean=('title_year', 'mean'), \
                                              critic_mean=('num_critic_for_reviews', 'mean'), \
                                              duration_mean=('duration', 'mean'), \
                                              cast_fb_mean=('cast_total_facebook_likes', 'mean'), \
                                              user_review_mean=('num_user_for_reviews', 'mean'), \
                                              imdb_mean=('imdb_score', 'mean')).round(2)

应该更像:

color = df_q6.groupby('color', as_index=False).agg({'profit_margin': 'mean',
                                            'num_critic_for_reviews':'mean',
                                            'duration': 'mean',
                                            'cast_total_facebook_likes': 'mean',
                                            'num_user_for_reviews': 'mean',
                                            'imdb_score': 'mean'}).round(2)

如果使用与您的情况类似的函数,请确保它以类似的方式格式化列及其聚合函数。