我有这个数据框 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` 等于按分组的最大值 `id` 及 `date` . 但我也需要得到最大值,只有当 `time` 早于7:00:00,即 `id=1` 及
date=2021-07-08 `max` 列应该等于8,而不是10,因为当 `time` 是9点。
这是 Dataframe `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
2条答案
按热度按时间lbsnaicq1#
让我们循序渐进
从时间列中提取小时组件
将小时数组件与
7
创建布尔掩码的步骤屏蔽中的值
record
小时大于小时的列7
Group
蒙面柱id
及date
及transform
使用max
计算每组的最大值jtjikinw2#
让我们确保时间是datatime类型:
过滤时间在7:00之前,分组并应用变换:
合并结果并向前填充:
输出: