晚上的小伙子,希望这个问题比我今年早些时候的第一个得到 -7 的问题要好!(我真的很感激,因为它有助于突出我的无知)
我想要实现的是编写一行巧妙的代码,我可以在我工作的任何数据帧中调用它以获得正确的周数或星期几。
现在,请考虑以下数据框:
import pandas as pd
import numpy as np
days = pd.date_range('01/01/2018', '01/04/2019', freq='D')
df = pd.DataFrame({'Date': days})
print(df.head(5))
Date
0 2018-01-01
1 2018-01-02
2 2018-01-03
3 2018-01-04
4 2018-01-05
现在,我想使用以下代码行创建公司周数:
请注意,我的公司使用财务日历,所以 4 月是第 1 周,但第 1 天是星期六(精明的人可能已经知道我的问题)!所以对于 2018 年,31/03/18 实际上是我 2019 财政年度的第 1 周第 1 周,因为它是星期六,我们最多只能有 53 个星期。
df['Week'] = np.where(df['Date'].dt.month >= 4, (df['Date'] + pd.Timedelta(days=2)).dt.week - 13,
(df['Date'] + pd.Timedelta(days=2)).dt.week + 39)
print(df)
Date Week
0 2018-01-31 44
1 2018-02-01 44
2 2018-02-02 44
到目前为止一切都很好吧?
所以让我们检查十二月
dec = df.Date.dt.month == 12
print(df.loc[dec].tail(5))
Date Week
330 2018-12-27 39
331 2018-12-28 39
332 2018-12-29 -12
333 2018-12-30 -12
334 2018-12-31 -12
问题,如果我理解这是 pd.Timedelta 试图正确放置我的周数,但由于我的初始公式month >= 4被放置为 -12
此外,3 月 31 日应该在第 1 周而不是第 53 周作为星期六。
假设这是许多人可能已经从事过的一项非常常见的任务,有没有人有一种方法或方式以 Pythonic 的方式来处理这个问题。
我自己的解决方案是手动创建一个数据框并手动修复周、日和财政年度,放入 noSQL 或 SQL dB 并在每个 dF 中调用它并将周数合并到我的报告中。
相关分类