python - 迭代 Isoweeks pandas

标签 python pandas date

我有一个包含 datevalueisoweek 字段的数据框,如下所示:

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()生成每周从 startend 的日期列表。

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/

相关文章:

Python Tkinter Tix : How to use ScrolledWindow with grid in Tix NoteBook

python - 如何将不同的应用程序合并到一个网页中?

python - 对大型分隔文件进行子集化的有效方法

ruby - 查找集合中的最短日期 (Ruby)

python - 自定义 Django 表单未显示 - 使用 Wagtail

python - 在 PyPy 上矢量化高斯 CDF(或 erf/erfc/等)的最快方法(即没有 SciPy)

python - 绘制系列饼图

python - 在 DataFrame 中应用 os.path.join 方法

php - 从 mysql 中提取正确日期的逻辑

date - d3 堆叠到分组条形图日期轴