我有一个包含 date
、value
和 isoweek
字段的数据框,如下所示:
date | value | isoweek
-----------------------------
2018-04-01 | 5 | 2018-13
2018-04-10 | 10 | 2018-15
2018-05-01 | 10 | 2018-18
其中 isoweek
是相应日期的年周。我的目标是迭代等周,找到数据中不存在的等周,并将一行插入到数据框中,并将 0
作为值。
预期输出如下所示:
date | value | isoweek
-----------------------------
2018-04-01 | 5 | 2018-13
NaN | 0 | 2018-14
2018-04-10 | 10 | 2018-15
NaN | 0 | 2018-16
NaN | 0 | 2018-17
2018-05-01 | 10 | 2018-18
如何迭代原始数据框,并找到数据中所有缺失的等周?
最佳答案
您可以使用pandas.date_range()生成每周从 start
到 end
的日期列表。
dates = pd.Series(pd.date_range(start=df['date'].min(), end=df['date'].max(), freq='W'))
isoweeks = (dates.dt.isocalendar().year.astype(str) + '-' + dates.dt.isocalendar().week.astype(str)).tolist()
max_isoweek = str(df['date'].max().isocalendar()[0]) + '-' + str(df['date'].max().isocalendar()[1])
if max_isoweek not in isoweeks:
isoweeks.append(max_isoweek)
这是为了获取开始
日期和结束
日期之间的所有iso周。
然后您可以将 df 合并到辅助数据框中以获得您想要的内容。
df = df.merge(pd.DataFrame({'isoweek': isoweeks}), how='right')
df['value'].fillna(0, inplace=True)
# print(df)
date value isoweek
0 2018-04-01 5.0 2018-13
1 NaT 0.0 2018-14
2 2018-04-10 10.0 2018-15
3 NaT 0.0 2018-16
4 NaT 0.0 2018-17
5 2018-05-01 10.0 2018-18
关于python - 迭代 Isoweeks pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66988671/