2016-07-10 55 views
6

ich folgende Datenrahmen haben:Excel SVERWEIS Äquivalent in Pandas

   A   B   C 
Index 
2001-06-30 100  2001-08-31  (=value of A at date B) 
2001-07-31 200  2001-09-30  ... 
2001-08-31 300  2001-10-31  ... 
2001-09-30 400  2001-11-30  ... 

Spalte B von Daten aus Spalte besteht A verschoben durch einige nach vorn. Ich möchte die Spalte C generieren, die aus den Werten aus der Spalte A unter date B besteht. (vorzugsweise in der Logik würde die Excel-SVERWEIS-Formel es tun. Ich suche hier nicht einfach nach shift (-2), weil in Wirklichkeit die Verschiebung zwischen B und Index nicht immer gleich ist).

Ich versuchte df.loc['B', 'A'], aber das wahrscheinlich zu einfach und erzeugt einen Fehler.

Antwort

12

Ich glaube, Sie brauchen map durch Spalte A:

df['C'] = df.B.map(df.A) 
print (df) 
       A   B  C 
Index        
2001-06-30 100 2001-08-31 300.0 
2001-07-31 200 2001-09-30 400.0 
2001-08-31 300 2001-10-31 NaN 
2001-09-30 400 2001-11-30 NaN 

Es ist die gleiche wie:

df['C'] = df.B.map(df.A.to_dict()) 
print (df) 
       A   B  C 
Index        
2001-06-30 100 2001-08-31 300.0 
2001-07-31 200 2001-09-30 400.0 
2001-08-31 300 2001-10-31 NaN 
2001-09-30 400 2001-11-30 NaN 
+0

danke @jezrael, das funktioniert völlig in Ordnung. Ich frage mich, warum diese Lösung nicht einfacher zu finden war. –

+0

Harte Frage. Vielleicht, weil es in Excel einen anderen Namen als Pandas hat, aber es ist dasselbe - 'vlookup' vs.' map'. – jezrael