代码之家  ›  专栏  ›  技术社区  ›  Charles R

获得一周中熊猫系列的第一天

  •  5
  • Charles R  · 技术社区  · 6 年前

    我有以下数据框:

    import pandas as pd
    from datetime import datetime, timedelta
    
    df = pd.DataFrame([
            ["A", "2018-08-03"],
            ["B", "2018-08-20"]
    ])
    df.columns = ["Item", "Date"]
    

    我想为我的df每一行获得一周的第一天。我试着这样做:

    df['Date'] =  pd.to_datetime(df['Date'], format='%Y-%m-%d')
    df["Day_of_Week"] = df.Date.dt.weekday
    
    df["First_day_of_the_week"] = df.Date - timedelta(days=df.Day_of_Week)
    

    但我收到了错误信息:

    TypeError: unsupported type for timedelta days component: Series
    

    我怎样才能得到一个系列的第一天? 我预期的结果是:

    • “A”,“2018-08-03”,“2018-07-30”
    • “B”,“2018-08-20”,“2018-08-20”
    5 回复  |  直到 6 年前
        1
  •  5
  •   kosnik    6 年前

    timedelta apply

    df["First_day_of_the_week"] = df.apply(lambda x: x['Date'] - timedelta(days=x['Day_of_Week']), axis=1)
    

    df["First_day_of_the_week"] = df.Date - df.Day_of_Week * timedelta(days=1)
    
        2
  •  3
  •   Spinor8    6 年前

    df["First_day_of_the_week"] = df['Date'].apply(lambda x: (x - timedelta(days=x.dayofweek)))
    print(df)
    

      Item       Date First_day_of_the_week
    0    A 2018-08-03            2018-07-30
    1    B 2018-08-20            2018-08-20
    
        3
  •  3
  •   jpp    6 年前

    df['First_day'] = df['Date'] - df['Date'].dt.weekday * np.timedelta64(1, 'D')
    
    print(df)
    
      Item       Date  First_day
    0    A 2018-08-03 2018-07-30
    1    B 2018-08-20 2018-08-20
    
        4
  •  2
  •   Brad Solomon    6 年前

    DateOffset

    >>> from pandas.tseries.offsets import Week
    
    >>> df.Date.where(df.Date.dt.weekday == 0, df.Date - Week(weekday=0))
    0   2018-07-30
    1   2018-08-20
    Name: Date, dtype: datetime64[ns]
    

        5
  •  0
  •   ilia timofeev    6 年前

    pandas

    df = pd.DataFrame({
        'Item': ['A', 'B'],
        'Date': ['2018-08-03', '2018-08-20']
    })
    
    df['Date'] = pd.to_datetime(df.Date) #Use pd.Timestamp
    df.Date - pd.TimedeltaIndex(df.Date.dt.dayofweek,unit='d') 
    

    0   2018-07-30
    1   2018-08-20
    dtype: datetime64[ns]
    

    pd.TimedeltaIndex pd.to_datetime

    Time Series / Date functionality