计算单列中单个日期与其他多个日期的天数差值
日期天数差对比实现
输入表格
| date | amount |
|---|---|
| 2011-01-02 | 50 |
| 2011-01-03 | 40 |
| 2011-01-04 | 20 |
| 2011-01-05 | 10 |
实现方案
使用Python的pandas库可快速完成需求,具体步骤:
- 将日期列转换为日期类型,便于差值计算
- 生成所有日期的笛卡尔积对,排除自身对比的行
- 计算两个日期的天数差,格式化输出为带"day/days"的字符串
- 整理成目标格式的表格
代码实现
import pandas as pd # 构造输入数据 data = { 'date': ['2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'], 'amount': [50, 40, 20, 10] } df = pd.DataFrame(data) # 转换日期格式 df['date'] = pd.to_datetime(df['date']) # 生成所有日期对的笛卡尔积 date_pairs = pd.merge(df[['date']], df[['date']], how='cross', suffixes=('', '_compared')) # 过滤掉日期与自身对比的行 date_pairs = date_pairs[date_pairs['date'] != date_pairs['date_compared']] # 计算天数差值 date_pairs['diff_days'] = (date_pairs['date_compared'] - date_pairs['date']).dt.days # 格式化差值字符串 def format_diff(days): return f"{days} day" if abs(days) == 1 else f"{days} days" date_pairs['difference in days'] = date_pairs['diff_days'].apply(format_diff) # 整理列顺序并重命名 result = date_pairs[['date', 'difference in days', 'date_compared']].rename(columns={'date_compared': 'date compared'}) # 转换日期为字符串格式 result['date'] = result['date'].dt.strftime('%Y-%m-%d') result['date compared'] = result['date compared'].dt.strftime('%Y-%m-%d') # 输出结果表格 print(result.to_markdown(index=False))
结果表格
| date | difference in days | date compared |
|---|---|---|
| 2011-01-02 | 1 day | 2011-01-03 |
| 2011-01-02 | 2 days | 2011-01-04 |
| 2011-01-02 | 3 days | 2011-01-05 |
| 2011-01-03 | -1 day | 2011-01-02 |
| 2011-01-03 | 1 day | 2011-01-04 |
| 2011-01-03 | 2 days | 2011-01-05 |
| 2011-01-04 | -2 days | 2011-01-02 |
| 2011-01-04 | -1 day | 2011-01-03 |
| 2011-01-04 | 1 day | 2011-01-05 |
注:示例结果中部分单数天数标注为"days"属于小错误,代码中已按语法规范处理为"day"
内容的提问来源于stack exchange,提问作者Nightengale
相关产品推荐
相关产品推荐

