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会变成这样:
| id | purchase_date | cost | service_date | days_diff |
|---|---|---|---|---|
| 101 | 2022-01-01 | 101 | 2022-01-04 | 3 |
| 102 | 2022-05-01 | 101 | 2022-03-21 | -41 |
这里第二个结果为负数,是因为service_date早于purchase_date,如果不需要正负,用上面注释里的abs()就可以啦。
内容的提问来源于stack exchange,提问作者Kevin Nash
相关产品推荐
相关产品推荐

