一次将多种功能应用于Pandas groupby对象

zthomas.nc

有人问过这个问题的变体(请参阅此问题),但我还没有找到一个很好的解决方案,因为这似乎是groupbyPandas中的一个常见用例

说我有数据框,lasts并且按user以下条件分组

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每个函数分别与数据框合并,然后合并生成的数据框,但这似乎效率低下,效率低下,我想必须有一个单行解决方案。

尽管这篇博文(在页面底部搜索“创建函数以获取组的统计信息”)建议将这些函数包装成一个函数作为字典,但我还没有真正找到一个

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

有关改善此工作流程的建议?

最大容量

如果您要稍微修改该get_stats功能:

def get_stats(group):
    return pd.Series({'custom_column_1': custom_func(group),
                      'custom_column_2':custom_func2(group)})

现在您只需执行以下操作:

In [202]: lasts.groupby('user').apply(get_stats).reset_index()
Out[202]:
  user  custom_column_1  custom_column_2
0    a          29993.0          10000.0
1    d          22493.5          75000.0
2    s          19992.0          30000.0

使用您的功能(不变)的替代方法(有点难看):

In [188]: pd.DataFrame(lasts.groupby('user')
                            .apply(get_stats).to_dict()) \
            .T \
            .rename_axis('user') \
            .reset_index()
Out[188]:
  user  custom_column_1  custom_column_2
0    a          29993.0          10000.0
1    d          22493.5          75000.0
2    s          19992.0          30000.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫,将多列的多种功能应用于groupby对象

将功能应用于Pandas Groupby

以特定顺序将多个功能应用于GroupBy对象

将ewm功能应用于Pandas groupby

将功能应用于groupby功能

如何将不同的功能应用于groupby对象?

将用户提供的功能应用于groupby对象

将一组功能应用于对象

将多个滚动功能应用于熊猫groupby滚动对象的多个列?

将函数应用于python熊猫中的groupby对象

是否可以将 python pandas 中的 groupby 应用于已经分组的对象?

将具有多个参数的函数应用于pandas groupby对象

将groupby应用于pandas datarame时添加Counters对象

将加权平均函数应用于pandas groupby对象中的列,但权重总和为零

Pandas GroupBy-在保留原始顺序的同时将功能应用于每个组

Pandas groupby汇总将多个功能应用于多个列

Pandas groupby-将不同的功能应用于每个组中的一半记录

pandas groupby将相同的功能应用于多列

使用pyspark将功能应用于groupBy数据

将多个功能应用于多个groupby列

熊猫Groupby将功能应用于组

熊猫在 groupby 对象上应用 groupby

PANDAS:尝试应用多种功能时如何访问groupby对象的键

将set_index应用于groupby对象,以便按组应用asfreq

应用于多个列的熊猫唯一不适用于groupby对象

Pandas 如何将函数应用于 groupby().first()

将pandas groupby的结果应用于多行

将排名应用于Pandas Groupby中的每个组

将功能列表应用于对象列表