मैं डेटाबेस के समान कॉलम से पिछले डेटा वाले कॉलम बना रहा हूं। उसी दिन की तरह, मुझे पहले दिन का 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 अंतिम दिन के डेटा के साथ Y कॉलम बनाने के लिए एक सहायक df है, और a df कॉलम बनाने के लिए एक सहायक df है Y समान-दिन-पिछले सप्ताह डेटा के साथ।

जब मैं उन्हें अलग-अलग मर्ज करता हूं तो यह पूरी तरह से काम करता है, लेकिन जब मैं उन सभी को मर्ज करना चाहता हूं (पहले x के साथ y और फिर x के साथ a) x के साथ y का मर्ज 'डिलीट' हो जाता है, जैसा कि आप देख सकते हैं कि Y_DiaAnterior कॉलम अंतिम df (या 'दूसरा मर्ज परिणाम') में नहीं हैं, भले ही मैंने उन्हें पहले ही मर्ज कर दिया हो।

पहला मर्ज परिणाम Foto1

दूसरा मर्ज परिणाम Foto2

तो, मैं यह कैसे कर सकता हूं कि अंतिम df में Y_DiaAnterior और Y_DiaSemAnterior चर हैं?

0
Chris 14 पद 2018, 19:00

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')
1
Scratch'N'Purr 14 पद 2018, 16:13