【问题标题】:DataFrameGroupBy to dataframe via apply(lambda x: x)DataFrameGroupBy 通过 apply(lambda x: x) 到数据帧
【发布时间】:2020-04-21 21:43:03
【问题描述】:

我有一个 pandas DataFrameGroupBy 对象,我想将其转换为普通数据框。现在我know that I can use

df_g.apply(lambda x: x)

但为什么需要这样做呢?考虑到在 Pandas 中申请通常很昂贵。有更好的解决方案吗?我没有看到我的测试用例有任何令人眼花缭乱的性能损失(因为我没有太多列),所以它可能没问题。只是好奇:)

示例代码:

import pandas as pd
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': ["a", "a", "a", "b", "b"]})
df_g = df.groupby(by='b')
df_again = df_g.apply(lambda x:x)

问候, 尼克拉斯

【问题讨论】:

  • 没有直截了当的方法,因为你总是想要在分组后做某事。否则它的目的是什么?
  • 在我的例子中,它在一个计算 api 服务中,我们在其中链接 pandas 操作。对于几乎所有情况,我们都会对其进行操作,但在少数情况下我们不会。现在我们可以通过更改链接来处理这些极端情况,以了解我们不应该运行分组步骤,或者允许它分组,然后简单地将其转换回边缘情况:)

标签: python pandas


【解决方案1】:

首先我们必须重新考虑为什么我们在组中不做任何事情时为什么要组。我们可以试试concat,应该比申请更快:

pd.concat(dict(iter(df_g)).values())

   a  b
0  1  a
1  2  a
2  3  a
3  4  b
4  5  b

%timeit pd.concat(dict(iter(df_g)).values())
#3.09 ms ± 229 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df_g.apply(lambda x: x)
#5.33 ms ± 325 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多