繁体   English   中英

Pandas Dataframe Groupby 多列并求和

[英]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 文件中添加列:利用率、可计费利用率、不可计费利用率

  1. Utilization 列的计算:Utilization = df[Hours]/9*100

-> 如果计费列值为“” - 创建列作为计费利用率

  1. 列中的计费利用率计算:计费利用率 = df[小时]/9 * 100

-> 如果计费列值为“ NO ” - 创建列为不可计费利用率

  1. 列中非计费利用率的计算:非计费利用率 = df[Hours]/9*100

代码

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 预期产出

我的 output

我的输出

您可以使用pivot_table()Hours “透视”到BillableNon-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM