Python 在pandas中创建周变量,自定义周的开始日期

Python 在pandas中创建周变量,自定义周的开始日期,python,python-3.x,pandas,Python,Python 3.x,Pandas,我将以下数据帧索引到时间戳: df = DataFrame(index = pd.date_range('4/1/2017', freq='3D', periods=10)) df['weekday'] = df.index.weekday_name 数据如下所示: weekday 2017-04-01 Saturday 2017-04-04 Tuesday 2017-04-07 Friday 2017-04-10 Monday 2017-

我将以下数据帧索引到时间戳:

df = DataFrame(index = pd.date_range('4/1/2017', freq='3D', periods=10))
df['weekday'] = df.index.weekday_name
数据如下所示:

              weekday
2017-04-01   Saturday
2017-04-04    Tuesday
2017-04-07     Friday
2017-04-10     Monday
2017-04-13   Thursday
2017-04-16     Sunday
2017-04-19  Wednesday
2017-04-22   Saturday
2017-04-25    Tuesday
2017-04-28     Friday
我想创建一个新的列“week”,它将给出一年中的第几周,但带有一个工作日

我知道我可以做到这一点:

df['week_sun'] = df.index.week
除了我希望一周的第一天是星期天以外的日子。对于这个问题,假设我需要它是星期三,这样得到的数据帧将是这样的:

              weekday  week_sun  week_wed
2017-04-01   Saturday        13        13
2017-04-04    Tuesday        14        13
2017-04-07     Friday        14        14
2017-04-10     Monday        15        14
2017-04-13   Thursday        15        15
2017-04-16     Sunday        15        15
2017-04-19  Wednesday        16        16
2017-04-22   Saturday        16        16
2017-04-25    Tuesday        17        16
2017-04-28     Friday        17        17

我不知道如何做到这一点。谢谢

根据您的要求,如果一周中的某一天“早于”参考日(在您的示例中为星期三),您只需将周数减去1即可

现在,让我们根据需要移动该值,这意味着工作日在周三之前,因此
df.index.dayofweek<2

In [164]: df.loc[df.index.dayofweek < 2, 'week_wed'] = (df[df.index.dayofweek < 2]['week_sun'] - 2) % 52 + 1

In [165]: df
Out[165]: 
              weekday  week_sun  week_wed
2017-04-01   Saturday        13        13
2017-04-04    Tuesday        14        13
2017-04-07     Friday        14        14
2017-04-10     Monday        15        14
2017-04-13   Thursday        15        15
2017-04-16     Sunday        15        15
2017-04-19  Wednesday        16        16
2017-04-22   Saturday        16        16
2017-04-25    Tuesday        17        16
2017-04-28     Friday        17        17

你能更详细地解释一下你想通过week_wed专栏实现什么吗?
In [164]: df.loc[df.index.dayofweek < 2, 'week_wed'] = (df[df.index.dayofweek < 2]['week_sun'] - 2) % 52 + 1

In [165]: df
Out[165]: 
              weekday  week_sun  week_wed
2017-04-01   Saturday        13        13
2017-04-04    Tuesday        14        13
2017-04-07     Friday        14        14
2017-04-10     Monday        15        14
2017-04-13   Thursday        15        15
2017-04-16     Sunday        15        15
2017-04-19  Wednesday        16        16
2017-04-22   Saturday        16        16
2017-04-25    Tuesday        17        16
2017-04-28     Friday        17        17
              weekday  week_sun  week_wed
2017-12-27  Wednesday        52        52
2017-12-30   Saturday        52        52
2018-01-02    Tuesday         1        52
2018-01-05     Friday         1         1