[英]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
這會返回:
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)
如果在您的情況下使用類似的函數,請確保它以類似的方式格式化列及其聚合函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.