【发布时间】:2021-04-29 10:10:07
【问题描述】:
我有一个数据框 df,我需要根据条件对多列进行分组。
输入
| Employee Name | Subjects | Billable | Hours | Date |
|---|---|---|---|---|
| Anu | Java | Yes | 8 | 01-03-2021 |
| Anu | Python | Yes | 9 | 02-03-2021 |
| Anu | SQL | No | 6 | 03-03-2021 |
| Anu | React | Yes | 5 | 03-03-2021 |
| Anu | .Net | No | 8 | 04-03-2021 |
| Bala | SQL | No | 5 | 01-03-2021 |
| Bala | Python | Yes | 4 | 01-03-2021 |
| Bala | Java | Yes | 2 | 02-03-2021 |
| Bala | .Net | No | 8 | 03-03-2021 |
| Bala | React | Yes | 7 | 04-03-2021 |
应在输出文件中添加列:利用率、可计费利用率、不可计费利用率
- 利用率列的计算:利用率 = df[Hours]/9*100
-> 如果计费列值为“YES”- 创建列作为计费利用率
- 列中的计费利用率计算:计费利用率 = df[Hours]/9 * 100
-> 如果计费列值为“NO”- 创建列为不可计费利用率
- 计算列中的非计费利用率:非计费利用率 = 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)
我的输出
【问题讨论】:
-
在您的输入数据框中,您缺少
"Utilization"列。您可以编辑您的问题并添加它吗? -
@AndrejKesely - 利用率列不是输入数据...
-
@Gomathi 是
Utilzation和Billable和Non Billable利用率的最终输出总和中的Utilzation列吗? -
@Shubham Sharma 是的,利用率是总小时数的总和。
-
@Gomathi 你确定预期的输出是正确的吗?例如
Bala在日期04-03-2021有计费“是”,并且在您的输出中是不可计费列。
标签: python pandas dataframe pandas.excelwriter