You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Pandas中CREATED_AT列继承索引的日期部分?

替换Pandas Datetime列的日期部分(保留时分秒)

问题场景

现有如下Pandas DataFrame:

import pandas as pd

data = {
    'CREATED_AT': ['2022-01-01 07:30:00', '2022-01-01 07:30:00'],
    'COUNT': [5, 10]
}
df = pd.DataFrame(data, index=['1990-01-01', '1990-01-02'])

索引为日期字符串,CREATED_AT列的datetime值日期部分完全相同,需要将CREATED_AT的日期部分替换为对应行的索引日期,保留原有的时分秒,期望结果:

CREATED_AT  COUNT
1990-01-01 1990-01-01 07:30:00      5
1990-01-02 1990-01-02 07:30:00     10

尝试操作时出现错误:无法添加DatetimeArray与DatetimeArray

解决方案

步骤1:统一datetime类型

先将索引和CREATED_AT列转换为datetime类型(若原本不是):

df.index = pd.to_datetime(df.index)
df['CREATED_AT'] = pd.to_datetime(df['CREATED_AT'])

方法1:矢量化时间偏移法(推荐)

计算原CREATED_AT的当日时间偏移量(即从当天0点到该时间的时长),再将偏移量加到索引日期上:

# 获取原时间的当日偏移量(Timedelta类型)
time_offset = df['CREATED_AT'] - df['CREATED_AT'].dt.floor('D')
# 将偏移量与索引日期相加,生成新的datetime
df['CREATED_AT'] = df.index + time_offset

该方法为矢量化操作,处理大数据集时效率更高,无字符串拼接的额外开销。

方法2:字符串拼接法

提取原时间的时分秒字符串,与索引日期拼接后转换为datetime:

# 提取时分秒部分
time_str = df['CREATED_AT'].dt.strftime('%H:%M:%S')
# 拼接日期与时分秒,转为datetime
df['CREATED_AT'] = pd.to_datetime(df.index.strftime('%Y-%m-%d') + ' ' + time_str)

错误原因

直接对两个DatetimeArray执行加法操作是Pandas不允许的——datetime之间的加法没有明确业务意义。正确逻辑是将其中一方转换为时间差(Timedelta),再与另一方的datetime对象相加。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:20:34