使用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()?我找不到这方面的任何参考。你是说反斜杠?这就是将代码分成多行。你可以看到一些例子