使用multi-merge-Python删除列

使用multi-merge-Python删除列,python,merge,Python,Merge,我正在使用数据库中相同列的过去数据创建列。就像同一天一样,我需要前一天的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=Tr

我正在使用数据库中相同列的过去数据创建列。就像同一天一样,我需要前一天的
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
来创建带有上周同一天数据的列
y

当我单独合并它们时,效果非常好,但是当我想合并所有它们(先是x和y,然后是x和a)时,x和y的合并被“删除”,因为你可以看到,
y
列不在最后的
df
(或“第二次合并结果”)中,即使我已经合并了它们

第一次合并结果

第二次合并结果


那么,我如何才能使最后的
df
具有
Y\u diaprevious
Y\u diasemaniator
变量呢?

因为你正在用
x
a
的新合并覆盖你的
z
。另外,由于您使用的是
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')

它起作用了!谢谢顺便问一下,合并中的除法符号是什么?“/.merge()?我找不到这方面的任何参考。你是说反斜杠?这就是将代码分成多行。你可以看到一些例子