【问题标题】:How to vectorise/speed up grouping/filtering data in pandas?如何矢量化/加速熊猫中的分组/过滤数据?
【发布时间】:2020-09-23 13:44:25
【问题描述】:

我有一个带有“ID”、“状态”和“年龄”列的熊猫数据框。一个特定的 ID 在数据框中有几行,其中一些状态为 0,而另一些状态为 1。我想

  1. 过滤掉那些 ID 中没有状态为 1 的行的所有行。例如,如果 ID 5673 有十行状态为 0 但没有状态为 1 的行 -> 必须删除所有 ID 为 5673 的行。
  2. 按 ID 对条目进行分组,并对“年龄”进行汇总。例如,如果 ID 9873 有一行状态为 1,五行状态为 0 -> 最终数据帧应仅包含一行 ID 9873,SUM(age) 列应包含所有 15 个年龄的总和ID 9873 的原始数据框中的条目。

我可能可以使用 for 循环来做到这一点,但我已经看到几个答案说它效率低下,不推荐使用 pandas。相反,我正在寻找使用一些内置函数(如 group by)的快速矢量化实现。我的数据框有超过 10^5 行,所以速度可能是一个因素。

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    尝试使用掩码:

    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mask.html

    mask = df["ID"] == 1
    print(df[mask])
    

    对于聚合:

    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.aggregate.html

    你可以把它和面具结合起来。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2017-11-30
      • 2019-06-04
      • 1970-01-01
      • 2020-10-02
      相关资源
      最近更新 更多