【问题标题】:add column of new dates from existing columns using pandas使用熊猫从现有列中添加新日期列
【发布时间】:2018-03-09 15:35:35
【问题描述】:

我有一个日期和星期的数据框,如下所示:

weeks = ["2016 W08","2016 W09","2016 W10","2016 W11"]
date = ["2-22-16", "2-29-16", "3-7-16", "3-14-16"]
df = pd.DataFrame(
{'week': weeks,
 'date': date,
 })
df
          date      week
0   2016-02-22  2016 W08
1   2016-02-29  2016 W09
2   2016-03-07  2016 W10
3   2016-03-14  2016 W11

我正在尝试非常简单地创建一个新列end,它比date 的值晚7 天。

我完全不喜欢 for 循环,并且想念如何循环遍历每个索引。

import datetime
for row in df['date']:
    start_date = df[row]
    df['end_date'] = start_date + datetime.timedelta(days = 7)

我知道我已经接近答案但错过了!

【问题讨论】:

    标签: python pandas datetime for-loop dataframe


    【解决方案1】:
    from datetime import timedelta
    df.date=pd.to_datetime(df.date)
    df.date+timedelta(days=7)
    
    Out[691]: 
    0   2016-02-29
    1   2016-03-07
    2   2016-03-14
    3   2016-03-21
    Name: date, dtype: datetime64[ns]
    

    如果需要for循环:

    import datetime
    for i,row in df.iterrows():
        df.loc[i,'new']= row['date'] + datetime.timedelta(days = 7)
    df
    Out[698]: 
            date      week        new
    0 2016-02-22  2016 W08 2016-02-29
    1 2016-02-29  2016 W09 2016-03-07
    2 2016-03-07  2016 W10 2016-03-14
    3 2016-03-14  2016 W11 2016-03-21
    

    编辑:为什么你的循环不起作用

    for row in df['date']:
        start_date = row
        print(start_date + datetime.timedelta(days=7))
    

    row在这里返回日期的值,不能用自己的值调用df的值。

    【讨论】:

    【解决方案2】:

    试试pd.DateOffset:

    import pandas as pd
    weeks = ["2016 W08","2016 W09","2016 W10","2016 W11"]
    date = ["2-22-16", "2-29-16", "3-7-16", "3-14-16"]
    df = pd.DataFrame(
    {'week': weeks,
     'date': date,
     })
    df['date'] = pd.to_datetime(df['date']) #convert date column to datetime format
    df['end_date'] = pd.DatetimeIndex(df['date']) + pd.DateOffset(7) #create new column end_date which is 7 days later
    df
    

    df 将是:

        date        week        end_date
    0   2016-02-22  2016 W08    2016-02-29
    1   2016-02-29  2016 W09    2016-03-07
    2   2016-03-07  2016 W10    2016-03-14
    3   2016-03-14  2016 W11    2016-03-21
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2020-12-01
      • 1970-01-01
      • 2021-09-29
      • 2021-12-18
      • 1970-01-01
      • 2023-01-13
      相关资源
      最近更新 更多