0

From the following DataFrame:

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,})

Output:

    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

I am looking for a suitable function that takes the already contained value of the columns and uses it in a calculation and then overwrites it with the result of the calculation.

It concerns the columns time_u, time_a, time_p and time_q and should be applied according to the following principle:

time_u = worktime - pause - occu - (existing value of time_u)
time_a = (new value of time_u) - time_a
time_p = (new value of time_a) - time_p
time_q = (new value of time_p)- time_q

Is there a possible function that could be used here?

Using this formula manually, the output would look like this:

    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    1400    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    1440    1355.6

Unfortunately, this task is way beyond my skill level, so any help in setting up the appropriate function would be greatly appreciated.

Many thanks in advance

1

1 Answer 1

0

You can simply apply the relationships you have supplied sequentially. Or are you looking for something else? By the way, you put an extra space at the end of 'time_p'

df['time_u'] = df['worktime'] - df['pause'] - df['occu'] - df['time_u']
df['time_a'] = df['time_u'] - df['time_a']
df['time_p'] = df['time_a'] - df['time_p']
df['time_q'] = df['time_p'] - df['time_q']
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.