【问题标题】:groupby column if value is less than some value如果值小于某个值,则按列分组
【发布时间】:2021-07-07 21:45:53
【问题描述】:

我有一个类似的数据框

df = pd.DataFrame({'time': [1, 5, 100, 250, 253, 260, 700], 'qty': [3, 6, 2, 5, 64, 2, 5]})
df['time_delta'] = df.time.diff()

我想对time_delta 进行分组,以便将time_delta 小于10 的所有行组合在一起,可以删除time_delta 列,并对qty 求和。 预期结果是

pd.DataFrame({'time': [1, 100, 250, 700], 'qty': [9, 2, 71, 5]})

基本上我希望有类似df.groupby(time_delta_func(10)).agg({'time': 'min', 'qty': 'sum'}) func 的东西。我阅读了pd.Grouper,但似乎基于时间的分组非常严格且基于间隔。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用gt 表示大于和cumsum 在每次时间增量大于 10 时创建一个新组

    res = (
        df.groupby(df['time_delta'].gt(10).cumsum(), as_index=False)
          .agg({'time':'first','qty':sum})
    )
    print(res)
       time  qty
    0     1    9
    1   100    2
    2   250   71
    3   700    5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      相关资源
      最近更新 更多