pandas python panda Dataframe ,对值的累计求和,如果达到某个值,则更改单元格的值,插入重复行并添加余额

3qpi33ja  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(117)

对于每个“名称”,我希望按降序计算“小时数”列,然后如果“名称”的小时数达到38,我需要:
在到达第38个小时的行下面插入一个新行(绿色)(称之为旧行;蓝色)。
加上剩余的小时数,使老行达到38(Ankit为4.5,Abhishek为8)
将原始值的余额添加到下面行/单元格中的新值
下面是反映之前的代码。没有必要包括颜色,我只是添加了他们的演示文稿

import pandas as pd

df = pd.DataFrame()

df['number'] = (651,651,651,4267,4267,4267,4267,4267,4267,4267,8806,8806,8806,6841,6841,6841,6841)

df['name']=('Alex','Alex','Alex','Ankit','Ankit','Ankit','Ankit','Ankit','Ankit','Ankit','Abhishek','Abhishek','Abhishek','Blake','Blake','Blake','Blake')

df['hours']=(8.25,7.5,7.5,7.5,14,12,15,11,6.5,14,15,15,13.5,8,8,8,8)

df['loc']=('Nar','SCC','RSL','UNIT-C','UNIT-C','UNIT-C','UNIT-C','UNIT-C','UNIT-C','UNIT-C','UNI','UNI','UNI','UNKING','UNKING','UNKING','UNKING')

print(df)

zlhcx6iw

zlhcx6iw1#

IIUC,您可以使用groupby操作:

# compute cumsum
s = df.groupby('number')['hours'].cumsum()
# identify value above threshold
m = s.gt(38)
idx = m.groupby(df['number']).idxmax()

# compute difference from previous sum to 38
delta = s.groupby(df['number']).shift().rsub(38).fillna(s)

# duplicate rows
out = df.loc[df.index.repeat((df.index.isin(idx)&m)+1)]

# update
out.loc[out.index.duplicated(keep='last'), 'hours'] = delta
out.loc[out.index.duplicated(), 'hours'] -= delta

print(out)

输出:

number      name  hours     loc
0      651      Alex   8.25     Nar
1      651      Alex   7.50     SCC
2      651      Alex   7.50     RSL
3     4267     Ankit   7.50  UNIT-C
4     4267     Ankit  14.00  UNIT-C
5     4267     Ankit  12.00  UNIT-C
6     4267     Ankit   4.50  UNIT-C
6     4267     Ankit  10.50  UNIT-C
7     4267     Ankit  11.00  UNIT-C
8     4267     Ankit   6.50  UNIT-C
9     4267     Ankit  14.00  UNIT-C
10    8806  Abhishek  15.00     UNI
11    8806  Abhishek  15.00     UNI
12    8806  Abhishek   8.00     UNI
12    8806  Abhishek   5.50     UNI
13    6841     Blake   8.00  UNKING
14    6841     Blake   8.00  UNKING
15    6841     Blake   8.00  UNKING
16    6841     Blake   8.00  UNKING

相关问题