gpt4 book ai didi

python - 根据时间条件获取每个组的最大值

转载 作者:行者123 更新时间:2023-12-04 16:37:23 25 4
gpt4 key购买 nike

我有这个数据框 df

   id        date     time  record
0 1 2021-07-08 3:00:00 8
1 1 2021-07-08 5:30:00 7
2 1 2021-07-08 9:00:00 10
3 1 2021-01-08 6:30:00 5
4 1 2021-01-08 9:30:00 7
5 2 2021-07-08 3:00:00 7
6 2 2021-07-08 9:00:00 14
7 2 2021-07-08 5:30:00 10
8 2 2021-01-08 3:00:00 11
9 2 2021-01-08 3:00:00 13

我需要创建一个新列 max 等于按 iddate 分组的最大值。但我也只需要在 time 早于 7:00:00 时获得最大值。即对于 id=1date=2021-07-08 max 列应该等于 8,而不是 10,因为当我们得到 10 时间 是 9:00:00。

这是数据框 df 的一种更易于访问的方式

import io
import pandas as pd

data1_txt = """
id,date,time,record
1,2021-07-08,3:00:00,8
1,2021-07-08,5:30:00,7
1,2021-07-08,9:00:00,10
1,2021-01-08,6:30:00,5
1,2021-01-08,9:30:00,7
2,2021-07-08,3:00:00,7
2,2021-07-08,9:00:00,14
2,2021-07-08,5:30:00,10
2,2021-01-08,3:00:00,11
2,2021-01-08,3:00:00,13
"""

df = pd.read_csv(io.StringIO(data1_txt))

理想的结果是

   id        date     time  record  max
0 1 2021-07-08 3:00:00 8 8
1 1 2021-07-08 5:30:00 7 8
2 1 2021-07-08 9:00:00 10 8
3 1 2021-01-08 6:30:00 5 5
4 1 2021-01-08 9:30:00 7 5
5 2 2021-07-08 3:00:00 7 10
6 2 2021-07-08 9:00:00 14 10
7 2 2021-07-08 5:30:00 10 10
8 2 2021-01-08 3:00:00 11 13
9 2 2021-01-08 3:00:00 13 13

最佳答案

让我们一步步来

  • 从时间列中提取小时部分
  • 将小时分量与 7 进行比较以创建 bool 掩码
  • 屏蔽 record 列中小时大于 7 的值
  • Groupiddate 屏蔽列,并使用 max transform计算每组的最大值
m = pd.to_timedelta(df['time']).dt.components['hours'].ge(7)
df['max'] = df['record'].mask(m).groupby([df['id'], df['date']]).transform('max')

   id        date     time  record   max
0 1 2021-07-08 3:00:00 8 8.0
1 1 2021-07-08 5:30:00 7 8.0
2 1 2021-07-08 9:00:00 10 8.0
3 1 2021-01-08 6:30:00 5 5.0
4 1 2021-01-08 9:30:00 7 5.0
5 2 2021-07-08 3:00:00 7 10.0
6 2 2021-07-08 9:00:00 14 10.0
7 2 2021-07-08 5:30:00 10 10.0
8 2 2021-01-08 3:00:00 11 13.0
9 2 2021-01-08 3:00:00 13 13.0

关于python - 根据时间条件获取每个组的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68300527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com