2016-07-10 16 views
6

ho seguenti frame di dati:Excel VLOOKUP equivalente in panda

   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  ... 

Colonna B consiste di date da colonna A spostato in avanti da parte di alcuni. Vorrei generare la colonna C costituita dai valori della colonna A su date B. (preferibilmente nella logica l'excel VLOOKUP formula lo farebbe. Non sto cercando semplicemente shift (-2) qui perché in realtity lo spostamento tra B e Index non è sempre uguale).

Ho provato df.loc['B', 'A'] ma questo molto probabilmente è semplicistico e ha prodotto un errore.

risposta

12

Penso che è necessario map per colonna 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 

È uguale:

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

grazie @jezrael, questo sta funzionando perfettamente bene. Mi chiedo perché questa soluzione non sia stata più facile da trovare altrove. –

+0

Domanda difficile. Forse perché in Excel ha un nome diverso come nei panda, ma è lo stesso - 'vlookup' contro' map'. – jezrael