You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于目标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

火山引擎 最新活动