繁体   English   中英

Pandas Dataframe 按列分组

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

在此处输入图像描述

预计 Output

在此处输入图像描述

注意

我尝试使用reset_index,但groupby function 不起作用。

我已经尝试制作以下 function 并且我能够获得您想要的 output

def func(x): 
for i in range(1, x['Department Name'].size):
        x['Department Name'].iloc[i] = ''
return x;

df['Department Name'] = df['Department Name'].apply(str)
df = df.groupby('Department 
Name').apply(func).set_index('Department Name')
df.head()

证明在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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