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

Pandas:通过列位置计算两列差值

嘿,我来帮你解决这个日期差值计算的问题!你直接用df.iloc[:,1] - df.iloc[:,3]失败的核心原因是:这两列的日期目前是字符串类型,Pandas没法直接对字符串做日期运算。咱们按下面的步骤来搞定:

第一步:把字符串日期转换成Pandas可识别的datetime类型

首先得把位置1(purchase_date)和位置3(service_date)的列转换成datetime格式,代码如下:

import pandas as pd

# 先构建你给出的示例DataFrame
data = {
    'id': [101, 102],
    'purchase_date': ['01-01-2022', '01-05-2022'],
    'cost': [101, 101],
    'service_date': ['04-01-2022', '03-21-2022']
}
df = pd.DataFrame(data)

# 通过列位置转换为datetime类型,format参数要匹配你的日期格式(日-月-年)
df.iloc[:, 1] = pd.to_datetime(df.iloc[:, 1], format='%d-%m-%Y')
df.iloc[:, 3] = pd.to_datetime(df.iloc[:, 3], format='%d-%m-%Y')

第二步:计算日期差值并新增列

现在就可以用列位置来计算天数差了,直接相减后用.dt.days提取整数天数,然后新增到DataFrame里:

# 计算service_date与purchase_date的天数差,新增为days_diff列
df['days_diff'] = (df.iloc[:, 3] - df.iloc[:, 1]).dt.days

# 如果需要取绝对值(不管先后顺序,只看间隔天数),可以这样写:
# df['days_diff'] = abs((df.iloc[:, 3] - df.iloc[:, 1]).dt.days)

最终效果

运行完上面的代码,你的DataFrame会变成这样:

idpurchase_datecostservice_datedays_diff
1012022-01-011012022-01-043
1022022-05-011012022-03-21-41

这里第二个结果为负数,是因为service_date早于purchase_date,如果不需要正负,用上面注释里的abs()就可以啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:39:09