如何基于计算函数覆写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
相关产品推荐
相关产品推荐

