我正在使用数据库的相同列中的过去数据创建列。就像当天一样,我需要前一天的Y
值以及前一周的一周的同一天。所以:
x = df.copy()
x["Date"] = pd.to_datetime(df.rename(columns={"Año":"Year","Mes":"Month","Dia":"Day"})[["Year","Month","Day"]])
y = x[["Date","Y"]]
y.rename(columns={"Y":"Y_DiaAnterior"}, inplace=True)
y["Date"] = y["Date"] + dt.timedelta(days=1)
z = pd.merge(x,y,on=["Date"], how="left")
display(y.head()) # First merge result
a = x[["Date","Y"]]
a.rename(columns={"Y":"Y_DiaSemAnterior"}, inplace=True)
a["Date"] = a["Date"] + dt.timedelta(days=7)
z = pd.merge(x,a,on=["Date"], how="left")
z.head() # Second merge result
其中y df
是辅助df
,用于创建包含前一天数据的列Y
,而a df
是辅助df
,用于创建列{ {1}},以及上周的当天数据。
当我分别合并它们时,它工作得很好,但是当我想合并所有它们(首先将x与y,然后将x与a合并)时,将x与y合并将被“删除”,如您所见即使已经合并了{1}}列也不在最后的Y
(或“第二合并结果”)中。
那么,如何使最后的Y_DiaAnterior
具有df
和df
变量呢?
答案 0 :(得分:1)
因为您要用z
和x
的新合并覆盖a
。另外,因为使用的是y.head()
,所以您没有在代码中显示第一次合并的结果。
如果要获得所有3个df的合并结果,则可以链接合并:
# prep x
x = df.copy()
x["Date"] = pd.to_datetime(df.rename(columns={"Año":"Year", "Mes":"Month", "Dia":"Day"})[["Year", "Month", "Day"]])
# prep y
y = x[["Date", "Y"]].copy()
y.rename(columns={"Y":"Y_DiaAnterior"}, inplace=True)
y["Date"] = y["Date"] + dt.timedelta(days=1)
# prep a
a = x[["Date", "Y"]].copy()
a.rename(columns={"Y":"Y_DiaSemAnterior"}, inplace=True)
a["Date"] = a["Date"] + dt.timedelta(days=7)
# now merge all
z = x.merge(y, on='Date', how='left') \
.merge(a, on='Date', how='left')