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

连续值与固定值的差值百分比计算及DataFrame新增E、F列需求

解决方案:为DataFrame添加差值百分比新列

先把你提供的数据集整理成可复现的pandas DataFrame,方便后续操作:

import pandas as pd

data = {
    'A': list(range(14)),
    'B': ['2002-01-12 10:00:00', '2002-01-12 11:00:00', '2002-01-12 12:00:00',
          '2002-01-13 09:00:00', '2002-01-13 11:00:00', '2002-01-13 12:00:00',
          '2002-01-13 12:00:00', '2002-01-14 10:00:00', '2002-01-14 11:00:00',
          '2002-01-14 11:00:00', '2002-01-14 12:00:00', '2002-01-16 10:00:00',
          '2002-01-16 11:00:00', '2002-01-16 12:00:00'],
    'C': ['John', 'Africa', 'Mary', 'Billy', 'Mira', 'Hillary', 'Romina',
          'George', 'Denzel', 'Michael', 'Bisc', 'Virgin', 'Antonio', 'Sito'],
    'D': [19, 15, 30, 5, 6, 50, 50, 30, 12, 12, 25, 16, 10, 5]
}

df = pd.DataFrame(data)
# 把B列转换为datetime类型,方便后续按日期分组操作
df['B'] = pd.to_datetime(df['B'])

针对你提到的计算连续值与固定值之间的差值百分比并添加E、F列的需求,我分两种常见实用场景实现:

场景1:全局固定值+当日基准值

假设:

  • E列:D列值与全局固定值(比如30)的差值百分比,公式为 ((D - 固定值)/固定值)*100
  • F列:D列值与当日第一个D值的差值百分比(按B列日期分组取基准)

代码实现

# 定义全局固定值
global_fixed = 30

# 计算E列:与全局固定值的差值百分比,保留两位小数
df['E'] = ((df['D'] - global_fixed) / global_fixed) * 100
df['E'] = df['E'].round(2)

# 计算F列:与当日第一个D值的差值百分比
# 提取日期作为分组键
df['date'] = df['B'].dt.date
# 取每组第一个D值作为当日基准
daily_base = df.groupby('date')['D'].transform('first')
# 计算百分比差值并格式化
df['F'] = ((df['D'] - daily_base) / daily_base) * 100
df['F'] = df['F'].round(2)
# 删除临时date列
df.drop('date', axis=1, inplace=True)

最终结果预览

ABCDEF
02002-01-12 10:00:00John19-36.670.00
12002-01-12 11:00:00Africa15-50.00-21.05
22002-01-12 12:00:00Mary300.0057.89
32002-01-13 09:00:00Billy5-83.330.00
42002-01-13 11:00:00Mira6-80.0020.00
52002-01-13 12:00:00Hillary5066.67900.00
62002-01-13 12:00:00Romina5066.67900.00
72002-01-14 10:00:00George300.000.00
82002-01-14 11:00:00Denzel12-60.00-60.00
92002-01-14 11:00:00Michael12-60.00-60.00
102002-01-14 12:00:00Bisc25-16.67-16.67
112002-01-16 10:00:00Virgin16-46.670.00
122002-01-16 11:00:00Antonio10-66.67-37.50
132002-01-16 12:00:00Sito5-83.33-68.75

场景2:自定义固定值逻辑

如果你的“固定值”是其他规则(比如D列中位数、列C为特定值时的D值),只需要调整基准值的定义即可。比如以D列中位数作为固定值:

median_fixed = df['D'].median()
df['E'] = ((df['D'] - median_fixed) / median_fixed) * 100
df['E'] = df['E'].round(2)

这样就能灵活适配不同的固定值需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:59