2017-03-28 7 views
1

ich eine df haben:Pandas Rückgabewerte von df unter Verwendung von Werten aus df

Index ColA ColB ... Marker1 Marker2 Return 
t0  a0  b0  ...  t0  colA  a0 
t1  a1  b1  ...  t1  colB  b1 
t2  a2  b2  ...  t1  colZ  z1 
t3  a3  b3  ...  t3  colB  b3 

Wie erhalte ich die Spalte Return Rundfunk mit? Die Logik ist:

  • Schnittmuster1 = Relevante Index
  • Marker2 = Relevante Spalte
  • Return = Die Werte in der Koordinate (Schnittmuster1, Marker2)

Antwort

3

Verwendung pd.DataFrame.lookup

df.assign(Return2=df.lookup(df.Marker1, df.Marker2)) 

     ColA ColB ColZ Marker1 Marker2 Return Return2 
Index            
t0  a0 b0 z0  t0 ColA  a0  a0 
t1  a1 b1 z1  t1 ColB  b1  b1 
t2  a2 b2 z2  t1 ColZ  z1  z1 
t3  a3 b3 z3  t3 ColB  b3  b3 

Setup

from io import StringIO 
import pandas as pd 

txt = """Index ColA ColB ColZ ... Marker1 Marker2 Return 
t0  a0  b0  z0  ...  t0  ColA  a0 
t1  a1  b1  z1  ...  t1  ColB  b1 
t2  a2  b2  z2  ...  t1  ColZ  z1 
t3  a3  b3  z3  ...  t3  ColB  b3""" 

df = pd.read_csv(StringIO(txt), delim_whitespace=True, index_col=0).drop('...', 1) 
+0

'lookup' ist wirklich toll hier +1 – pansen

+0

Danke @pansen – piRSquared

+0

Wow, ich wusste nicht, dass eine solche Funktion existiert! Danke @piRSquared! – Yeile

1

können Sie verwenden:

df['new'] = df.apply(lambda x: df.loc[x.Marker1,x.Marker2], axis=1) 

Und besser lookup:

+0

Lookup ist genau das, was ich brauche! Danke @jazrael – Yeile

Verwandte Themen