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

如何根据pandas中另一列数值变化计算带惩罚因子的列求和

实现带有分组变化惩罚因子的求和计算

首先定义你的DataFrame:

import pandas as pd

data = {
    'col_1': [4.0, 4.0, 49.0, 49.0, 49.0, 52.0, 52.0],
    'val_1': [0.89, 0.56, 0.7, 1.23, 0.8, 0.5, 0.2]
}
df = pd.DataFrame(data)

方法一:基于总和减去惩罚总额

核心思路:每次col_1发生变化时,对应前一组最后一行的val_1减0.4,等价于总求和值减去0.4乘以变化次数。

代码:

# 计算val_1原始总和
total_raw = df['val_1'].sum()
# 统计col_1的变化次数(排除第一行的初始NaN对比)
change_count = df['col_1'].ne(df['col_1'].shift()).iloc[1:].sum()
# 计算带惩罚的总和
total = total_raw - 0.4 * change_count
print(total)  # 输出4.08

方法二:逐行调整后求和

核心思路:标记出需要应用惩罚的行(每个col_1分组的最后一行,且不是整个DataFrame的最后一行),对这些行的val_1减0.4后再求和。

代码:

# 标记每个分组的最后一行
df['is_last_in_group'] = df.groupby('col_1').cumcount(ascending=False) == 0
# 标记需要惩罚的行:分组最后一行且不是整个数据的最后一行
df['need_penalty'] = df['is_last_in_group'] & (df['col_1'] != df['col_1'].iloc[-1])
# 计算调整后的值
df['adjusted_val'] = df['val_1'] - df['need_penalty'] * 0.4
# 求和
total = df['adjusted_val'].sum()
print(total)  # 输出4.08

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:22