[英]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.