Python DataFrame时间列问题:同组货币对时间一致后逐组递增1小时
问题解决方案
核心问题分析
你当前的代码存在两个关键问题:
- 仅创建了3行数据,没有生成3×3的9组完整货币对组合
- 循环逐行递增时间,无法实现「每3行共用同一时间,组间时间递加1小时」的需求
修正代码
import pandas as pd import datetime from datetime import timedelta # 生成3×3的全量货币对组合(笛卡尔积) from_curr = ["EUR", "GBP", "USD"] to_curr = ["INR", "SGD", "HKD"] data = pd.DataFrame([(f, t) for f in from_curr for t in to_curr], columns=["From", "To"]) # 生成符合要求的时间序列:3个间隔1小时的时间点,每个时间点重复3次 init_date = datetime.datetime(1, 1, 1) # 先创建3个递增的时间点 time_points = [init_date + timedelta(hours=i) for i in range(3)] # 每个时间点重复3次,对应每组3行货币对 data["time"] = [str(t)[11:19] for t in time_points for _ in range(3)] print(data)
代码说明
- 生成全量货币对:用列表推导式实现
From和To的笛卡尔积,直接得到9行完整组合 - 批量设置时间:
- 先创建3个间隔1小时的基础时间点
- 将每个时间点重复3次,确保每3行共用同一时间,下一组时间自动递加1小时
- 时间格式化:通过
str(t)[11:19]提取时分秒部分,和你原代码的格式保持一致
输出示例
From To time 0 EUR INR 00:00:00 1 EUR SGD 00:00:00 2 EUR HKD 00:00:00 3 GBP INR 01:00:00 4 GBP SGD 01:00:00 5 GBP HKD 01:00:00 6 USD INR 02:00:00 7 USD SGD 02:00:00 8 USD HKD 02:00:00
如果需要调整分组逻辑(比如按To字段分组设置时间),只需修改时间序列的生成逻辑:将[str(t)[11:19] for t in time_points for _ in range(3)]改为[str(t)[11:19] for _ in range(3) for t in time_points]即可。
内容的提问来源于stack exchange,提问作者Swapnil Sonawane
相关产品推荐
相关产品推荐

