我有这样的数据.
Record number | level 1 person | level 2 person | date | time spent on job |
---|---|---|---|---|
1 | Tim David, Cameron Green - (Division 1) | 01/01/2023 | 5 | |
2 | Tim David - (Division 1) | Mitch, Eli Kin Marsh - (Division 2) | 02/02/2023 | 3 |
3 | David Warner - (Division 2), Travis Head - (Division 3) | 03/04/2023 | 1 | |
4 | Cameron Green - (Division 1) | Tim David - (Division 1) | 07/01/2023 | 2 |
最终目标是获得每个人每月花在工作上的总时间,按部门分类.这与人的级别无关.结果应该类似于:
Division | Person | Month | time spent on job |
---|---|---|---|
Division 1 | Tim David | Jan-23 | 7 |
Division 1 | Tim David | Feb-23 | 3 |
Division 1 | Cameron Green | Jan-23 | 7 |
Division 2 | Mitch, Eli Kin Marsh | Feb-23 | 3 |
Division 2 | David Warner | Apr-23 | 1 |
Division 3 | Travis Head | Apr-23 | 1 |
要做到这一点,首先,我正在努力清理"2级人员"一栏.在本栏中,记录1表示1组中都有两个人.一个人是Tim David,另一个是Cameron Green.在记录2中,只有一个人Mitch,Eli Kin Marsh,他在2组.在3组中,有两个人在两个不同的组.大卫·华纳在2区,特拉维斯·海德在3区.在唱片4中,只有一个人蒂姆·大卫在1区.
- 我正在try 创建一个新的专栏,以捕捉特定记录中涉及的所有人.在这样做的时候,我无法拆分"2级人员"一栏中的名字.例如,在记录1和记录2中,我很难用逗号分隔,因为在记录2中,即使只有一个人,也有一个逗号分隔姓氏和其他名字.所以我想要记录1的名单是记录2的[‘Tim David’,‘Cameron Green’][‘Mitch Eli Kin Marsh’].
这就是我try 这一部分的方式:
def split_names(row):
string = row['level 2 person']
pattern = '([\w\s,-]+)'
names = re.split(pattern, string)
name_list = list()
for name in names:
replacements = [('-', ''), ('(', ''), (')', '')]
for char, replacement in replacements:
if char in name:
name= name.replace(char, replacement)
name_list.append(name)
while("" in name_list): # remove empty elements
name_list.remove("")
return name_list
df['names'] = df.apply(split_names,axis=1)
- 然后我也想为那些没有的人分配部门.如果多个人在同一部门,就会发生这种情况.例如,在记录1中.因此,我正在考虑创建另一个列,其中每个元素都对应于该人员所属的部门.因此,对于记录1,该列表将是[‘分区1’,‘分区1’]