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)
如果使用与您的情况类似的函数,请确保它以类似的方式格式化列及其聚合函数。
我正在玩数据分析,使用来自 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)
如果使用与您的情况类似的函数,请确保它以类似的方式格式化列及其聚合函数。