如果我做对了,您希望将所有日期放在一列中,然后只保留那些满足经过周数条件的行 (every x week)。假设您的数据框看起来像这样(我使用了您的并复制了行并更改了一些):
id y1 start end every x weeks Mon Tue Wed Thu Fri \
0 1 30 01-02-2021 10-03-2021 2 1 0 1 0 0
1 2 50 01-02-2021 28-02-2021 3 1 1 0 0 0
2 3 20 01-02-2021 28-02-2021 1 1 0 0 1 0
3 1 30 01-03-2021 10-03-2021 2 1 0 1 0 0
4 2 50 01-02-2021 28-02-2021 3 1 1 0 0 0
5 3 20 01-02-2021 28-02-2021 1 1 0 0 1 0
6 1 30 02-02-2021 10-03-2021 2 1 0 1 0 0
7 2 50 01-01-2021 28-02-2021 3 1 1 0 0 0
8 3 20 01-02-2021 28-02-2021 1 1 0 0 1 0
9 1 30 01-03-2021 10-03-2021 2 1 0 1 0 0
10 2 50 04-01-2021 28-02-2021 3 1 1 0 0 0
11 3 20 01-02-2021 28-02-2021 1 1 0 0 1 0
12 1 30 01-02-2021 10-03-2021 2 1 0 1 0 0
13 2 50 01-02-2021 28-02-2021 3 1 1 0 0 0
14 3 20 01-02-2021 28-02-2021 1 1 0 0 1 0
Sat Sun
0 0 0
1 1 0
2 0 0
3 0 0
4 1 0
5 0 0
6 0 0
7 1 0
8 0 0
9 0 0
10 1 0
11 0 0
12 0 0
13 1 0
14 0 0
定义要堆叠的列(在您的情况下为 start 和 end):
keys = ['start','end']
df2 = pd.melt(df, id_vars=['id','y1','every x weeks'], value_vars=keys, value_name='date')
这给了你
id y1 every x weeks variable date
0 1 30 2 start 01-02-2021
1 2 50 3 start 01-02-2021
2 3 20 1 start 01-02-2021
3 1 30 2 start 01-03-2021
4 2 50 3 start 01-02-2021
5 3 20 1 start 01-02-2021
6 1 30 2 start 02-02-2021
7 2 50 3 start 01-01-2021
8 3 20 1 start 01-02-2021
9 1 30 2 start 01-03-2021
10 2 50 3 start 04-01-2021
11 3 20 1 start 01-02-2021
12 1 30 2 start 01-02-2021
13 2 50 3 start 01-02-2021
14 3 20 1 start 01-02-2021
15 1 30 2 end 10-03-2021
16 2 50 3 end 28-02-2021
17 3 20 1 end 28-02-2021
18 1 30 2 end 10-03-2021
19 2 50 3 end 28-02-2021
20 3 20 1 end 28-02-2021
21 1 30 2 end 10-03-2021
22 2 50 3 end 28-02-2021
23 3 20 1 end 28-02-2021
24 1 30 2 end 10-03-2021
25 2 50 3 end 28-02-2021
26 3 20 1 end 28-02-2021
27 1 30 2 end 10-03-2021
28 2 50 3 end 28-02-2021
29 3 20 1 end 28-02-2021
现在,你可以选择你想要的任何星期
id y1 every x weeks variable date
1 2 50 3 start 01-02-2021
4 2 50 3 start 01-02-2021
7 2 50 3 start 01-01-2021
10 2 50 3 start 04-01-2021
13 2 50 3 start 01-02-2021
16 2 50 3 end 28-02-2021
19 2 50 3 end 28-02-2021
22 2 50 3 end 28-02-2021
25 2 50 3 end 28-02-2021
28 2 50 3 end 28-02-2021
如果您想要所有其他列,请将它们添加到 id_vars。