已經提出了這個問題的變化(見this question),但我還沒有找到一個好的解決方案,似乎是Pandas中的一個常見使用案例groupby
。一次應用多個功能到Pandas groupby object
說我有user
數據框lasts
和I組:
lasts = pd.DataFrame({'user':['a','s','d','d'],
'elapsed_time':[40000,50000,60000,90000],
'running_time':[30000,20000,30000,15000],
'num_cores':[7,8,9,4]})
而且我有這些功能我想申請groupby_obj
(什麼功能做的不是很重要,我做起來,只是知道他們需要從數據幀的多個列):
def custom_func(group):
return group.running_time.median() - group.num_cores.mean()
def custom_func2(group):
return max(group.elapsed_time) -min(group.running_time)
我可以apply
每項功能分開到數據幀,然後合併所產生的dataframes,但似乎效率不高,是不雅的,我想應該有一個單線解決方案。
我還沒有真正找到一個,雖然這blog post(搜索「創建一個函數來獲得組的統計」朝向頁面底部)建議將函數作爲字典包裝到一個函數中:
def get_stats(group):
return {'custom_column_1': custom_func(group), 'custom_column_2':custom_func2(group)}
然而,當我運行代碼groupby_obj.apply(get_stats)
,而不是列的,我得到的字典結果柱:
user
a {'custom_column_1': 29993.0, 'custom_column_2'...
d {'custom_column_1': 22493.5, 'custom_column_2'...
s {'custom_column_1': 19992.0, 'custom_column_2'...
dtype: object
當在現實中我想用一行代碼,以獲得更接近此數據框的內容:
user custom_column_1 custom_column_2
a 29993.0 10000
d 22493.5 75000
s 19992.0 30000
有關改進此工作流程的建議?
恕我直言,在一個系列中包裝字典是你提出的三個問題的最佳解決方案。謝謝。 –
@ zthomas.nc,歡迎您:)如果您認爲它已回答您的問題,請考慮[接受](http://meta.stackexchange.com/a/5235)答案 – MaxU
同意@ zthomas.nc而且是,別忘了接受.... – piRSquared