[英]Pandas Dataframe Groupby with multiple columns and sum it
我有一个 dataframe df,我需要根据条件对多列进行分组。
输入
员工姓名 | 科目 | 可计费 | 小时 | 日期 |
---|---|---|---|---|
阿努 | Java | 是的 | 8 | 01-03-2021 |
阿努 | Python | 是的 | 9 | 02-03-2021 |
阿努 | SQL | 不 | 6 | 03-03-2021 |
阿努 | 反应 | 是的 | 5 | 03-03-2021 |
阿努 | 。网 | 不 | 8 | 04-03-2021 |
巴拉 | SQL | 不 | 5 | 01-03-2021 |
巴拉 | Python | 是的 | 4 | 01-03-2021 |
巴拉 | Java | 是的 | 2 | 02-03-2021 |
巴拉 | 。网 | 不 | 8 | 03-03-2021 |
巴拉 | 反应 | 是的 | 7 | 04-03-2021 |
应在 output 文件中添加列:利用率、可计费利用率、不可计费利用率
-> 如果计费列值为“是” - 创建列作为计费利用率
-> 如果计费列值为“ NO ” - 创建列为不可计费利用率
代码
available =9
utilization= (df['Hours']/available*100).round(2)
df = df.assign(Utilization = utilization)
df1 = df.groupby(['Date','Employee Name'])['Utilization'].sum()
df['Billable'] = np.where(df['Billable'] == 'Yes', 'Billable Utilization','Non Billable Utilization')
df2 = (df.groupby(['Date','Employee Name']).agg({'Hours':sum}).div(available).mul(100)).round(2)
我的 output
您可以使用pivot_table()
将Hours
“透视”到Billable
和Non-Billable
列,然后转换为利用率:
# sample data
df = pd.DataFrame({'Employee Name':{0:'Anu',1:'Anu',2:'Anu',3:'Anu',4:'Anu',5:'Bala',6:'Bala',7:'Bala',8:'Bala',9:'Bala'},'Subjects':{0:'Java',1:'Python',2:'SQL',3:'React',4:'.Net',5:'SQL',6:'Python',7:'Java',8:'.Net',9:'React'},'Billable':{0:'Yes',1:'Yes',2:'No',3:'Yes',4:'No',5:'No',6:'Yes',7:'Yes',8:'No',9:'Yes'},'Hours':{0:8,1:9,2:6,3:5,4:8,5:5,6:4,7:2,8:8,9:7},'Date':{0:'01-03-2021',1:'02-03-2021',2:'03-03-2021',3:'03-03-2021',4:'04-03-2021',5:'01-03-2021',6:'01-03-2021',7:'02-03-2021',8:'03-03-2021',9:'04-03-2021'}})
# pivot hours into (non)billable
df = df.pivot_table(index=['Date', 'Employee Name'], columns='Billable').reset_index()
df.columns = ['Date', 'Employee Name', 'Non-Billable', 'Billable']
# compute utilization
df['Non-Billable'] = df['Non-Billable'].div(9).mul(100).round(2)
df['Billable'] = df['Billable'].div(9).mul(100).round(2)
df['Utilization'] = df[['Billable', 'Non-Billable']].fillna(0).sum(axis=1)
# Date Employee Name Non-Billable Billable Utilization
# 0 01-03-2021 Anu NaN 88.89 88.89
# 1 01-03-2021 Bala 55.56 44.44 100.00
# 2 02-03-2021 Anu NaN 100.00 100.00
# 3 02-03-2021 Bala NaN 22.22 22.22
# 4 03-03-2021 Anu 66.67 55.56 122.23
# 5 03-03-2021 Bala 88.89 NaN 88.89
# 6 04-03-2021 Anu 88.89 NaN 88.89
# 7 04-03-2021 Bala NaN 77.78 77.78
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.