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

基于ID分组与有效期筛选,用Pandas计算修正后总计值

Pandas解决方案:按ID分组计算修正后总额(AmendedTotal)

以下是适配PowerBI PowerQuery Python编辑器的代码,完全匹配你的需求逻辑:

import pandas as pd
from datetime import datetime

# 复制PowerQuery传入的数据集
df = dataset.copy()

# 1. 将Expiry Date转换为datetime类型(匹配示例中的mm/dd/yy格式)
df['Expiry Date'] = pd.to_datetime(df['Expiry Date'], format='%m/%d/%y')

# 2. 定义日期区间:今日(仅保留日期部分)和6个月后的日期
today = pd.Timestamp(datetime.today().date())
six_months_later = today + pd.DateOffset(months=6)

# 3. 按ID分组计算每个ID的AmendedTotal
def compute_amended(group):
    # 同一ID的Total值默认一致,取第一个即可
    base_total = group['Total'].iloc[0]
    # 筛选有效期在今日至6个月后的行
    eligible_rows = group[(group['Expiry Date'] >= today) & (group['Expiry Date'] <= six_months_later)]
    # 计算需要扣除的总额
    total_deduction = (eligible_rows['Total'] * eligible_rows['Percent of Total']).sum()
    # 返回修正后总额
    return base_total - total_deduction

# 分组计算并生成ID与AmendedTotal的映射
amended_map = df.groupby('ID').apply(compute_amended).reset_index(name='AmendedTotal')

# 4. 将修正后总额合并回原数据集
df = df.merge(amended_map, on='ID', how='left')

# 输出处理后的数据集给PowerQuery
df

关键逻辑说明

  • 日期格式处理:通过pd.to_datetime将字符串类型的到期日转为datetime,确保日期比较的准确性;如果你的日期格式是dd/mm/yy,只需将format='%m/%d/%y'改为format='%d/%m/%y'。
  • 区间计算:用pd.DateOffset精确计算6个月后的日期,避免手动计算月份的误差。
  • 分组计算:自定义函数处理每个ID的分组,筛选符合条件的行后计算扣除总额,最终得到每个ID统一的修正后总额。
  • 合并数据:通过merge将修正后总额关联到原数据集的每一行,保证同一ID的所有行拥有相同的AmendedTotal。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:47