基于目标DataFrame的季度维度填充DataFrame行(缺失值补0)
基于目标DataFrame的季度维度填充DataFrame行(缺失值补0)
这个需求在日常数据处理里挺常见的,咱们用Pandas就能轻松搞定,我给你分享两种简单易懂的方法,你可以按需选择:
先准备好原始数据
首先先把你给出的两个DataFrame定义好:
import pandas as pd data = {'QuarterYear': ["Q3 2023", "Q4 2023", "Q1 2024", 'Q2 2024', "Q3 2024", "Q4 2024"], 'data1': [5, 6, 2, 1, 10, 3], 'data2': [12, 4, 2, 7, 2, 9], 'data3': [2, 42, 2, 6, 2, 4]} df = pd.DataFrame(data) data1 = {'QuarterYear': ["Q4 2023", 'Q2 2024', "Q3 2024"], 'data1': [5, 9, 10], 'data2': [7, 7, 3], 'data3': [2, 11, 3]} df1 = pd.DataFrame(data1)
方法1:用merge左连接补全
这种方法逻辑直观,先拿完整的季度列表去匹配df1,缺失的部分补0:
# 提取df里的完整季度列表,和df1做左连接 result = df[['QuarterYear']].merge(df1, on='QuarterYear', how='left') # 把缺失值替换成0 result = result.fillna(0) # 把数值列转成整数(因为fillna后会变成float类型) result[['data1', 'data2', 'data3']] = result[['data1', 'data2', 'data3']].astype(int) print(result)
方法2:用reindex快速补全
这个方法更简洁,直接用完整季度列表重置df1的索引:
# 先把df1的索引设置为季度列 df1.set_index('QuarterYear', inplace=True) # 用df的季度列表重新索引,缺失位置填充0,最后把索引转回列 result = df1.reindex(df['QuarterYear'], fill_value=0).reset_index() print(result)
最终输出结果
两种方法都会得到你想要的效果:
QuarterYear data1 data2 data3 0 Q3 2023 0 0 0 1 Q4 2023 5 7 2 2 Q1 2024 0 0 0 3 Q2 2024 9 7 11 4 Q3 2024 10 3 3 5 Q4 2024 0 0 0
备注:内容来源于stack exchange,提问作者TIC-FLY




