[英]Pandas Dataframe groupby column
我有一个 dataframe df 我需要按部门名称列分组
输入
员工姓名 | 部门名称 | 科目 | 可计费 | 小时 | 日期 |
---|---|---|---|---|---|
阿努 | CS | Java | 是的 | 8 | 01-03-2021 |
阿努 | CS | Python | 是的 | 9 | 02-03-2021 |
阿努 | CS | SQL | 不 | 6 | 03-03-2021 |
阿努 | CS | 反应 | 是的 | 5 | 03-03-2021 |
阿努 | CS | 。网 | 不 | 8 | 04-03-2021 |
巴拉 | CS | SQL | 不 | 5 | 01-03-2021 |
巴拉 | CS | Python | 是的 | 4 | 01-03-2021 |
巴拉 | CS | Java | 是的 | 2 | 02-03-2021 |
巴拉 | CS | 。网 | 不 | 8 | 03-03-2021 |
巴拉 | CS | 反应 | 是的 | 7 | 04-03-2021 |
代码
df = pd.pivot_table(df,index=['Department Name','Employee Name','Billable'],columns=['Subjects'],values='Hours',aggfunc={'Hours': np.sum})
# Resetting index
df = df.reset_index ()
list_column = df.columns
# Adding new columns and calculation
total = df.sum(axis=1)
df.insert(len(df.columns), column='Total', value=total)
available_col = len(df.columns)
Utilization_col = len(df.columns)
utilization_row = len(df.columns)
# Adding Available column
available = 168
df.insert(len(df.columns), column='Available', value=available)
# Adding Utilization column
utilization = (total / available)
df.insert(len(df.columns), column='Utilization', value=utilization)
# Filter dataframe using groupby
df1 = df.groupby(['Department Name','Employee Name'], sort=False ).sum(min_count=1)
df1['Available'] = available
# Adding Billable Utilization column and Non-billable Utilization column
df['Billable'] = np.where(df['Billable'] == 'Billable', 'Billable Utilization','Non Billable Utilization')
df2 = (df.groupby(['Employee Name', 'Billable Status'])[list_column].sum().sum(axis=1).unstack().div(available).mul(100)).round(2)
df = df1.join(df2).reset_index()
df.index = df.index
# Round the column value
df['Total'] = df['Total'].round(2)
df = df.groupby(['Department Name','Employee Name'], as_index=False).sum(min_count=1)
预计 Output
注意:
我尝试使用reset_index,但groupby function 不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.