代码之家  ›  专栏  ›  技术社区  ›  Chris

使用multi-merge-Python删除列

  •  0
  • Chris  · 技术社区  · 7 年前

    我正在使用数据库中相同列的过去数据创建列。就在同一天,我需要 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_DiaAnterior (或“第二次合并结果”),即使我已经合并了它们。

    第一次合并结果 Foto1

    第二次合并结果 Foto2

    那么,我怎样才能在决赛中做到这一点呢 df 有 Y_ Y_DiaSemAnterior 变量?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Scratch'N'Purr    7 年前

    因为你正在覆盖你的 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')