我有一个简单的任务,即创建连续的天数并对其进行一些计算。
我使用的是:
date = pd.DatetimeIndex(start='2019-01-01', end='2019-01-10',freq='D')
df = pd.DataFrame([date, date.week, date.dayofweek], index=['Date','Week', 'DOW']).T
df
现在我想使用以下方法计算回周和周中的日期:
df['Date2'] = pd.to_datetime('2019' + df['Week'].map(str) + df['DOW'].map(str), format='%Y%W%w')
我得到的结果是:
据我了解,DatetimeIndex 有一种不同的计算周数的方法,因为 1stJan2019 应该是 Week=0 和 dow=2,当我尝试运行代码时: pd.to_datetime('201902', format=' %Y%W%w')
: 时间戳('2019-01-01 00:00:00')
提出类似问题here和 here但两者的差异都来自不同的时区,在这里我不使用它们。
感谢您的帮助!
最佳答案
根据文档https://github.com/d3/d3-time-format#api-reference , 看来 %W 是基于星期一的一周,而 %w 是基于星期日的工作日。
我运行了以下代码以获取预期结果:
date = pd.DatetimeIndex(start='2019-01-01', end='2019-01-10',freq='D')
df = pd.DataFrame([date, date.week, date.weekday_name, date.dayofweek], index=['Date','Week', 'Weekday', 'DOW']).T
df['Week'] = df['Week'] - 1
df['Date2'] = pd.to_datetime('2019' + df['Week'].map(str) + df['Weekday'].map(str), format='%Y%W%A', box=True)
请注意,2018 年 12 月 31 日是 2019 年的第一周
Date Week Weekday DOW Date2
0 2018-12-31 00:00:00 0 Monday 0 2018-12-31
关于python - 计算(格式化)相同日期时,Pandas DatetimeIndex 和 to_datetime 存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324348/