如何从 pandas 系列中的等周整数返回到日期时间对象?

How to get back to a datetime object from an isoweek integer in a pandas series?

我被这个问题困住了。虽然我发现了一些类似的问题,但我无法将解决方案应用到我的案例中。

我有一个小系列,其中我有一个实验性部署的开始和结束日期。我的目标是获取开始部署的一周的开始日期(星期一 00h 00min),并且与上周相同。

这是我的系列:

输入

print(df_startend)

输出

Camera_Deployment_Start   2015-09-28 11:00:00
Camera_Deployment_End     2017-12-25 16:40:00
dtype: datetime64[ns]

我想我可以先获取周数,然后返回一个 datetime 对象,它代表一周的开始。所以我这样做了:

df_startend=df_startend.apply(lambda x: x.isocalendar())

输入

print(df_startend)

输出

Camera_Deployment_Start    (2015, 40, 1)
Camera_Deployment_End      (2017, 52, 1)
dtype: object
None

值得一提的是,我可以忽略(tuple[2])的第3个位置的对象。在此示例中,两者巧合为 1(一周的第一天),但其他数据样本可能并非如此。

从现在开始我无法管理。 我的最终目标是生成其间所有周的所有开始日期。可能使用类似的东西:

ws=pd.date_range(start=,end=,freq='W')

非常感谢您的关注,非常感谢!

如果只有 2 个元素 Series firstsubtract days 由 dayofweek and then use floor for remove times and then date_rangeW-Mon offset 提取:

print (df_startend)
Camera_Deployment_Start   2015-09-28 11:00:00
Camera_Deployment_End     2015-12-25 16:40:00
dtype: datetime64[ns]


s = (df_startend - pd.to_timedelta(df_startend.dt.dayofweek, unit='d')).dt.floor('d')

ws=pd.date_range(start=s['Camera_Deployment_Start'],
                 end=s['Camera_Deployment_End'],
                 freq='W-Mon')
print (ws)
DatetimeIndex(['2015-09-28', '2015-10-05', '2015-10-12', '2015-10-19',
               '2015-10-26', '2015-11-02', '2015-11-09', '2015-11-16',
               '2015-11-23', '2015-11-30', '2015-12-07', '2015-12-14',
               '2015-12-21'],
              dtype='datetime64[ns]', freq='W-MON')

详情:

print (s)
Camera_Deployment_Start   2015-09-28
Camera_Deployment_End     2015-12-21
dtype: datetime64[ns]

isocalendar 的解决方案:

s = df_startend.apply(lambda x: '-'.join(str(y) for y in x.isocalendar()[:2]))
s = pd.to_datetime(s + '-1', format='%Y-%W-%w') - pd.Timedelta(7, 'd')

print (s)
Camera_Deployment_Start   2015-09-28
Camera_Deployment_End     2015-12-21
dtype: datetime64[ns]