已经提出了这个问题的变化(见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