如何将data.frame中department的时间均分至真实团队成员?
问题描述
我有一个记录团队成员每月任务时长的数据集:
| Empl_level | team_member | 2022/05 | 2022/06 | 2022/07 | 2022/08 |
|---|---|---|---|---|---|
| 0 | department | 117 | 69 | 73 | 30 |
| 1 | Diana | 108 | 108 | 113 | 184 |
| 1 | Irina | 90 | 63 | 56 | 40 |
| 2 | Inga | 77 | 56 | 74 | 30 |
| 3 | Elina | 23 | 35 | 58 | 79 |
需要把department条目的任务时长平均分配给其他4位真实成员,生成新的数据集,最终形式如下:
| Empl_level | team_member | 2022/05 | 2022/06 |
|---|---|---|---|
| 1 | Diana | 108+(117/4) | 108+(69/4) |
| 1 | Irina | 90+(117/4) | 63+(69/4) |
| 2 | Inga | 77+(117/4) | 56+(69/4) |
| 3 | Elina | 23+(117/4) | 35+(69/4) |
解决方案
可以用Python的pandas库快速实现这个需求,分两种场景处理:
场景1:直接计算最终数值结果
import pandas as pd # 构造原始数据 data = { 'Empl_level': [0, 1, 1, 2, 3], 'team_member': ['department', 'Diana', 'Irina', 'Inga', 'Elina'], '2022/05': [117, 108, 90, 77, 23], '2022/06': [69, 108, 63, 56, 35], '2022/07': [73, 113, 56, 74, 58], '2022/08': [30, 184, 40, 30, 79] } df = pd.DataFrame(data) # 分离部门数据和成员数据 dept_row = df[df['team_member'] == 'department'] members_df = df[df['team_member'] != 'department'].copy() # 计算每月平均分配时长 member_count = len(members_df) month_cols = ['2022/05', '2022/06', '2022/07', '2022/08'] avg_dept_hours = dept_row[month_cols].values[0] / member_count # 将平均值加到成员对应月份 members_df[month_cols] += avg_dept_hours # 输出结果 print(members_df)
场景2:保留公式形式(如108+(117/4))
如果需要保留分配过程的公式显示,可以用字符串拼接处理:
import pandas as pd # 构造原始数据 data = { 'Empl_level': [0, 1, 1, 2, 3], 'team_member': ['department', 'Diana', 'Irina', 'Inga', 'Elina'], '2022/05': [117, 108, 90, 77, 23], '2022/06': [69, 108, 63, 56, 35], '2022/07': [73, 113, 56, 74, 58], '2022/08': [30, 184, 40, 30, 79] } df = pd.DataFrame(data) # 分离部门数据和成员数据 dept_row = df[df['team_member'] == 'department'] members_df = df[df['team_member'] != 'department'].copy() # 生成带公式的列 month_cols = ['2022/05', '2022/06', '2022/07', '2022/08'] for col in month_cols: dept_val = str(dept_row[col].values[0]) members_df[f'{col}_formula'] = members_df[col].astype(str) + '+(' + dept_val + '/4)' # 输出带公式的结果 result_cols = ['Empl_level', 'team_member'] + [f'{col}_formula' for col in month_cols] print(members_df[result_cols])
内容的提问来源于stack exchange,提问作者Диана
相关产品推荐
相关产品推荐

