【问题标题】:Create new pd dataframe column that gives a date based on day and week starting data创建新的 pd 数据框列,该列提供基于日期和星期起始数据的日期
【发布时间】:2021-08-16 08:22:17
【问题描述】:

我有一个 pandas 数据框,它有两列,第一列是“Week Starting”,另一列是“Day”。我想创建一个新列,它使用其他两列中的数据来给出完整的日期。例如,从下表中,新列的第一个条目应该是 5/04/2021,第二个应该是 6/04/2021。

Week Starting Day
5/04/2021 Monday
5/04/2021 Tuesday
5/04/2021 Wednesday

我已经尝试了以下解决方案,但我得到了错误

g['Week Starting'] = pd.to_datetime(g['Week Starting'])

conditions = [ (g['Day'] == 'Monday'), (g['Day'] == 'Tuesay'), (g['Day'] == 
                'Wednesday')]

values = [g['Week Starting'],(g['Week Starting'] + timedelta(days=1)), 
          (g['Week Starting'] + timedelta(days=2))]

g['Date'] = np.select(conditions, values)

错误:

DTypes 没有共同的 DType。例如,除非 dtype 为 object,否则它们不能存储在单个数组中。

谢谢。

【问题讨论】:

    标签: python pandas dataframe datetime data-science


    【解决方案1】:

    to_timedeltaSeries.map 的映射值一起使用:

    df['week_starting'] = pd.to_datetime(df['week_starting'])
    
    d = {"Monday":0,"Tuesday":1,"Wednesday":2,
         "Thursday":3,"Friday":4,"Saturday":5, 'Sunday':6}
    
    df["date"] = df['week_starting'] + pd.to_timedelta(df["day"].map(d),"day")
    print (df)
      week_starting        day       date
    0    2021-04-05     Monday 2021-04-05
    1    2021-04-05    Tuesday 2021-04-06
    2    2021-04-05  Wednesday 2021-04-07
    

    【讨论】:

    • 这也有效。我更喜欢它,因为它更简单并且不涉及 lamdas。谢谢。
    • @runraver - 是的,它更快更好,为什么要接受另一个解决方案?
    【解决方案2】:

    我认为这是最简单的解决方案:

    df = pd.DataFrame({"week_starting":["04/05/2021","04/05/2021","04/05/2021"],
                        "day":["Monday","Tuesday","Wednesday"]})
    
    df['week_starting'] = pd.to_datetime(df['week_starting'])
    
    conditions = {"Monday":0,"Tuesday":1,"Wednesday":2}
    
    df["date"] = df.apply(lambda x:x['week_starting']+pd.Timedelta(conditions[x["day"]],"day"),axis=1)
    

    您使用 apply 方法将 timedelta 添加到每个日期。

    希望它有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 2021-09-03
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多