如何按每10秒间隔为Pandas DataFrame添加递增标签
问题描述
我有一个包含ID和time列的Pandas DataFrame,数据如下:
| ID | time |
|---|---|
| 1 | 2022-07-31 23:59:53 |
| 2 | 2022-07-31 23:59:54 |
| 3 | 2022-07-31 23:59:55 |
| 4 | 2022-07-31 00:00:00 |
| 5 | 2022-07-31 00:00:01 |
| 6 | 2022-07-31 00:00:02 |
| 7 | 2022-07-31 00:00:07 |
| 8 | 2022-07-31 00:00:10 |
| 9 | 2022-07-31 00:00:13 |
需要基于time列按每10秒的间隔为数据添加递增的字母标签,期望输出如下:
| ID | time | DESIRED_VALUE |
|---|---|---|
| 1 | 2022-07-31 23:59:53 | A |
| 2 | 2022-07-31 23:59:54 | A |
| 3 | 2022-07-31 23:59:55 | A |
| 4 | 2022-08-01 00:00:00 | B |
| 5 | 2022-08-01 00:00:01 | B |
| 6 | 2022-08-01 00:00:02 | B |
| 7 | 2022-08-01 00:00:07 | B |
| 8 | 2022-08-01 00:00:10 | C |
| 9 | 2022-08-01 00:00:13 | C |
解决方案
按以下步骤操作即可实现需求:
- 统一时间格式:先把
time列转换成Pandas的datetime类型,确保能正常计算时间间隔。 - 生成分组编号:以数据中最早的时间为基准,计算每个时间与基准时间的秒数差,除以10后取整数,得到每行的分组编号。
- 映射为字母标签:将分组编号对应成大写字母,比如编号0对应A、1对应B,以此类推。
代码实现:
import pandas as pd # 构造示例数据 data = { 'ID': [1,2,3,4,5,6,7,8,9], 'time': ['2022-07-31 23:59:53', '2022-07-31 23:59:54', '2022-07-31 23:59:55', '2022-07-31 00:00:00', '2022-07-31 00:00:01', '2022-07-31 00:00:02', '2022-07-31 00:00:07', '2022-07-31 00:00:10', '2022-07-31 00:00:13'] } df = pd.DataFrame(data) # 转换time列为datetime类型 df['time'] = pd.to_datetime(df['time']) # 计算每个时间与最早时间的秒数差,除以10取整得到分组ID base_time = df['time'].min() df['group_id'] = (df['time'] - base_time).dt.total_seconds() // 10 # 将分组ID映射为字母标签 df['DESIRED_VALUE'] = df['group_id'].apply(lambda x: chr(ord('A') + int(x))) # 可选:删除中间的group_id列 df = df.drop('group_id', axis=1) print(df)
运行代码后即可得到与期望一致的输出,其中时间列的跨天情况会被Pandas自动识别并正确计算间隔。
内容的提问来源于stack exchange,提问作者user17760969
相关产品推荐
相关产品推荐

