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

如何在DataFrame中将月度值转换为日度值(含特殊类别处理)

解决方案

核心调整点

原代码对所有类别的BP、RE字段统一执行了除以当月天数的操作,我们需要针对Quality Parameter类别添加分支逻辑:

  • 当Category为QUALITY PARAMETER(注意原代码做了全大写转换)时,日度值保持月度原值不变
  • 其他类别,日度值为月度值除以对应月份的天数

修改后的完整代码

import pandas as pd
import numpy as np

# 原有的数据转换与日期生成逻辑保留
distillery_excel_data_upper = distillery_excel_data.apply(lambda x: x.astype(pd.StringDtype()).str.upper())
distillery_excel_data_upper['Date'] = pd.to_datetime(distillery_excel_data_upper['Year'] + distillery_excel_data_upper['Month'], format='%Y%B')
excel_date = pd.to_datetime(distillery_excel_data_upper['Date'])
daywise_excel_data = (distillery_excel_data_upper.assign(Daily=[pd.date_range(*x, freq='D') for x in zip(excel_date, excel_date.add(pd.offsets.MonthEnd()))]).explode("Daily"))
daywise_excel_data["BP"] = daywise_excel_data["BP"].apply(pd.to_numeric)
daywise_excel_data["RE"] = daywise_excel_data["RE"].apply(pd.to_numeric)

# 关键修改:添加类别判断逻辑
# 先计算每个分组的当月天数
daywise_excel_data['month_days'] = daywise_excel_data.groupby(["Date", "Category", "Parameter", "Region", "Factory", "UOM"])['Date'].transform("count")

# 对BP、RE字段分别做条件赋值
daywise_excel_data['BP'] = np.where(
    daywise_excel_data['Category'] == 'QUALITY PARAMETER',
    daywise_excel_data['BP'],
    daywise_excel_data['BP'] / daywise_excel_data['month_days']
)

daywise_excel_data['RE'] = np.where(
    daywise_excel_data['Category'] == 'QUALITY PARAMETER',
    daywise_excel_data['RE'],
    daywise_excel_data['RE'] / daywise_excel_data['month_days']
)

# 后续清理与重命名逻辑保留
daywise_excel_data = daywise_excel_data.drop(['Date', 'Year', 'Month', 'month_days'], axis=1)
daywise_excel_data.rename(columns={'Daily': 'date'}, inplace=True)

代码说明

  1. 保留原有逻辑:日期生成、数据类型转换、行展开的部分完全复用原代码,保证基础功能不变
  2. 新增天数计算:通过transform("count")获取每个月度分组的天数,也就是对应月份的总天数
  3. 条件赋值:使用np.where快速判断类别,对非QUALITY PARAMETER的行执行除法,其余行保持原值
  4. 清理冗余字段:最后删除临时生成的month_days字段,保证输出结构简洁

验证结果

  • 对于Production类别(如行0):April有30天,BP=30/30=1,RE=60/30=2,符合期望
  • 对于Quality Parameter类别(如行1):BP=45、RE=20保持原值,所有日期行均一致,符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:44:56