如何用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
相关产品推荐
相关产品推荐

