【问题标题】:Create empty date columns创建空日期列
【发布时间】:2021-08-09 23:58:04
【问题描述】:

有没有办法添加用零填充的每周日期列,以便 df 从一月开始?

df
    2015-07-03    2015-07-10    2015-07-17
0      4             2            3
1      2             2            2
...

预期输出

df
    2015-01-02   2015-01-09        ... 2015-07-03    2015-07-10   2015-03-17
0         0        0                      4            2             3
1         0        0                      2            2             2
...          

【问题讨论】:

    标签: python python-3.x pandas date


    【解决方案1】:

    试试:

    首先使用date_range() 方法每周创建日期:

    df.columns=pd.to_datetime(df.columns)    
    date=pd.date_range('2015-01-02',df.columns.max(),freq='W')
    

    最后使用reindex(),append()方法和Transpose(T)属性:

    result=df.T.reindex(date,fill_value=0).append(df.T).T
    

    现在,如果您打印 result,您将获得所需的输出

    【讨论】:

    • 很好的解决方案 +1。如果使用 reindex 的 fill_value kwarg,则可以跳过 fillnaastype 步骤:result = df.T.reindex(date, fill_value=0).append(df.T).T
    • @HenryEcker 感谢您提供此信息....已在答案中更新此内容 :)
    【解决方案2】:

    要动态确定一年中的第一天,您可以尝试:

    c = pd.to_datetime(df.columns)
    c = pd.date_range(
        "01-" + str(c.min().year),
        c.max(),
        freq="W-" + c.max().day_name()[:3].upper(),
    )
    df.columns = pd.to_datetime(df.columns)
    df = df.reindex(c, axis=1, fill_value=0)
    print(df)
    

    打印:

       2015-01-02  2015-01-09  2015-01-16  2015-01-23  2015-01-30  2015-02-06  2015-02-13  2015-02-20  2015-02-27  2015-03-06  2015-03-13  2015-03-20  2015-03-27  2015-04-03  2015-04-10  2015-04-17  2015-04-24  2015-05-01  2015-05-08  2015-05-15  2015-05-22  2015-05-29  2015-06-05  2015-06-12  2015-06-19  2015-06-26  2015-07-03  2015-07-10  2015-07-17
    0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           4           2           3
    1           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           0           2           2           2
    

    【讨论】:

      【解决方案3】:

      我认为这可以为您解决问题。

      start_date = '2015-01-02'
      dti = pd.date_range(start_date, periods=weeks_number, freq="w")
      df = pd.DataFrame(columns = dti.date)
      

      只需传递您想要的 week_number。您可能还需要指定星期几,默认为“W-SUN”。

      【讨论】:

        猜你喜欢
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        • 2019-01-11
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多