首页 > 解决方案 > 创建新的 pd 数据框列,该列提供基于日期和星期起始数据的日期

问题描述

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

周开始
2021 年 5 月 4 日 周一
2021 年 5 月 4 日 周二
2021 年 5 月 4 日 周三

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

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 <class 'numpy.dtype[uint8]'> 和 <class 'numpy.dtype[datetime64]'> 没有共同的 DType。例如,除非 dtype 是 ,否则它们不能存储在单个数组中object

谢谢。

标签: pythonpandasdataframedatetimedata-science

解决方案


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

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 添加到每个日期。

希望它有效!


推荐阅读