Python 3.x 从一个热编码输入按顺序添加工作日

Python 3.x 从一个热编码输入按顺序添加工作日,python-3.x,pandas,Python 3.x,Pandas,我试图转换一个稀疏的工作日格式,按顺序表示星期,从一个附加列表中添加上下文信息 举例说明: weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] print(df) employee_name rest_day A

我试图转换一个稀疏的工作日格式,按顺序表示星期,从一个附加列表中添加上下文信息

举例说明:

weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

print(df)

 employee_name  rest_day
      Alex          0
      Alex          0
      Alex          0
      Alex          0
      Alex          0
      Alex          0
      Alex          1

      Frank         1
      Frank         0
      Frank         0
      Frank         0
      Frank         1
      Frank         0
      Frank         0
...
亚历克斯周日休息,弗兰克周一和周五休息

我想添加一个新列,其中包含上述列表中的值,表示工作日为:

print(final_df)

 employee_name  rest_day   weekday
      Alex          0       Monday
      Alex          0       Tuesday
      Alex          0       Wednesday
      Alex          0       Thursday
      Alex          0        ...
      Alex          0
      Alex          1       Sunday

      Frank         1       Monday
      Frank         0         ...
      Frank         0
      Frank         0
      Frank         1
      Frank         0
      Frank         0       Sunday
...

假设每个
employee\u name
正好有7行,您可以使用:

weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

df['weekday'] = df.groupby('employee_name').transform(lambda x: weekdays)
结果:

print(df)


   employee_name  rest_day    weekday
0           Alex         0     Monday
1           Alex         0    Tuesday
2           Alex         0  Wednesday
3           Alex         0   Thursday
4           Alex         0     Friday
5           Alex         0   Saturday
6           Alex         1     Sunday
7          Frank         1     Monday
8          Frank         0    Tuesday
9          Frank         0  Wednesday
10         Frank         0   Thursday
11         Frank         1     Friday
12         Frank         0   Saturday
13         Frank         0     Sunday

Use可以使用
date\u range
更直观地获取周-日名称

from itertools import cycle

seq = cycle(pd.date_range('2021-05-24', '2021-05-30').to_series().dt.day_name().to_list())
df['day'] = [next(seq) for count in range(df.shape[0])]
输出

   employee_name  rest_day    weekday
0           Alex         0     Monday
1           Alex         0    Tuesday
2           Alex         0  Wednesday
3           Alex         0   Thursday
4           Alex         0     Friday
5           Alex         0   Saturday
6           Alex         1     Sunday
7          Frank         1     Monday
8          Frank         0    Tuesday
9          Frank         0  Wednesday
10         Frank         0   Thursday
11         Frank         1     Friday
12         Frank         0   Saturday
13         Frank         0     Sunday