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

如何用Python创建余额在到期日前重复填充的月度透视表

实现透视表的Python方案

核心思路

  • 将到期日转换为日期类型,确保与已生成的月度日期范围格式统一
  • 生成项目与所有月度日期的笛卡尔积,让每个项目对应每个月份
  • 筛选出日期≤到期日的记录(对应示例中余额重复显示的逻辑)
  • 基于筛选结果构建透视表,空值填充为空白

完整代码示例

import pandas as pd

# 1. 准备原始数据
raw_data = {
    '项目': ['A', 'B', 'C'],
    '余额': [100, 150, 200],
    '到期日': ['2023/1/31', '2023/2/28', '2023/3/31']
}
df = pd.DataFrame(raw_data)

# 2. 转换日期格式
df['到期日'] = pd.to_datetime(df['到期日'])

# 3. 假设你已生成的月度日期范围(如果已有date_range变量,直接使用即可)
date_range = pd.date_range(start='2023-01-31', end='2023-03-31', freq='M')

# 4. 生成项目与日期的笛卡尔积
cross_join = pd.MultiIndex.from_product(
    [df['项目'].unique(), date_range],
    names=['项目', '日期']
).to_frame(index=False)

# 5. 合并数据并筛选符合条件的记录
merged = pd.merge(cross_join, df, on='项目', how='left')
filtered = merged[merged['日期'] <= merged['到期日']]

# 6. 构建透视表并格式化
pivot_result = filtered.pivot(
    index='项目',
    columns='日期',
    values='余额'
).fillna('')

# 将日期列转为指定格式字符串
pivot_result.columns = pivot_result.columns.strftime('%Y/%m/%d')

# 输出结果
print(pivot_result)

输出结果

2023/01/31 2023/02/28 2023/03/31
项目                                  
A           100                      
B           150       150           
C           200       200       200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:20:38