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

如何基于计算函数覆写Pandas DataFrame指定列的值?

Pandas DataFrame列值计算与覆写实现

原始DataFrame定义

import pandas as pd

worktime = 1440
person = [11,22,33,44,55]
begin_date = '2019-10-01'
shift= [1,2,3,1,2]
pause = [90,0,85,70,0]
occu = [60,0,40,20,0]
time_u = [50,40,80,20,0]
time_a = [84.5,0.0,10.5,47.7,0.0]
time_p = 0
time_q = [35.9,69.1,0.0,0.0,84.4]

df = pd.DataFrame({
    'date': pd.date_range(begin_date, periods=len(person)),
    'person': person,
    'shift': shift,
    'worktime': worktime,
    'pause': pause,
    'occu': occu,
    'time_u': time_u,
    'time_a': time_a,
    'time_p': time_p,
    'time_q': time_q,
})

初始输出

date  person  shift  worktime  pause  occu  time_u  time_a  time_p  time_q
0 2019-10-01      11      1      1440     90    60      50    84.5       0    35.9
1 2019-10-02      22      2      1440      0     0      40     0.0       0    69.1
2 2019-10-03      33      3      1440     85    40      80    10.5       0     0.0
3 2019-10-04      44      1      1440     70    20      20    47.7       0     0.0
4 2019-10-05      55      2      1440      0     0       0     0.0       0    84.4

计算规则

依次按以下规则覆写对应列值,每一步计算依赖前一步的新值:

  • time_u = worktime - pause - occu - 原time_u值
  • time_a = 新time_u值 - 原time_a值
  • time_p = 新time_a值 - 原time_p值
  • time_q = 新time_p值 - 原time_q值

期望输出

date  person  shift  worktime  pause  occu  time_u  time_a  time_p  time_q
0 2019-10-01      11      1      1440     90    60    1240  1155.5  1155.5  1119.6
1 2019-10-02      22      2      1440      0     0    1400  1400.0  1400.0  1330.9
2 2019-10-03      33      3      1440     85    40    1235  1224.5  1224.5  1224.5
3 2019-10-04      44      1      1440     70    20    1330  1282.3  1282.3  1282.3
4 2019-10-05      55      2      1440      0     0    1440  1440.0  1440.0  1355.6

实现函数

由于计算是链式依赖,必须按顺序更新列(避免引用旧值),实现代码如下:

def update_time_columns(df):
    # 计算新的time_u,基于原列值
    df['time_u'] = df['worktime'] - df['pause'] - df['occu'] - df['time_u']
    # 用新time_u更新time_a
    df['time_a'] = df['time_u'] - df['time_a']
    # 用新time_a更新time_p
    df['time_p'] = df['time_a'] - df['time_p']
    # 用新time_p更新time_q
    df['time_q'] = df['time_p'] - df['time_q']
    return df

# 调用函数更新DataFrame
df = update_time_columns(df)

运行后,df将完全匹配期望输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:31:03