2017-11-20 2 views
1

ich Pandas Datenrahmen wie folgt haben:Pandas Datenrahmen: Spaltenwert verwenden Zeichenfolge in einer anderen Spalte zu schneiden

 col1 col2 col3 
0 1  3  ABCDEFG 
1 1  5  HIJKLMNO 
2 1  2  PQRSTUV 

Ich möchte eine weitere Spalte hinzufügen, die eine Teil von col3 von Position in col1 sein sollte wie angegeben Position wie in col2 angegeben. So etwas wie col3[(col1-1):(col2-1)], die sich ergeben, sollten in:

 col1 col2 col3  new_col 
0 1  3  ABCDEFG ABC 
1 1  5  HIJKLMNO HIJK 
2 1  2  PQRSTUV PQ 

ich mit der versucht folgende:

my_df['new_col'] = my_df.col3.str.slice(my_df['col1']-1, my_df['col2']-1) 

und

my_df['new_col'] = data['col3'].str[(my_df['col1']-1):(my_df['col2']-1)] 

beide Ergebnisse in einer Spalte von NaN, während, wenn ich Fügen Sie zwei Zahlenwerte ein (zB data['col3'].str[1:3]) es funktioniert gut. Ich habe überprüft und die Typen sind korrekt (int64, int64 und Objekt). Auch außerhalb eines solchen Kontextes (z. B. mit einer for-Schleife) kann ich den Job erledigen, aber ich bevorzuge einen einzelnen Liner, der den DataFrame ausnutzt. Was mache ich falsch?

Antwort

1

Verwenden apply, da jede Zeile Prozess getrennt sein muss:

my_df['new_col'] = my_df.apply(lambda x: x['col3'][x['col1']-1:x['col2']], 1) 
print (my_df) 
    col1 col2  col3 new_col 
0  1  3 ABCDEFG  ABC 
1  1  5 HIJKLMNO HIJKL 
2  1  2 PQRSTUV  PQ 
+0

Es funktionierte perfekt. Vielen Dank! –

+0

Froh kann helfen! Schöner Tag! – jezrael

Verwandte Themen