2016-06-29 28 views
3

Ich habe eine Pandas DataFrame, die eine Liste von Ganzzahlen innerhalb einer der Spalten enthält. Ich möchte auf die einzelnen Elemente in dieser Liste zugreifen. Ich habe einen Weg gefunden, es zu benutzen, indem ich benutze und es zurück in DataFrame umwandel, aber ich frage mich, ob es einen einfacheren/besseren Weg gibt. In diesem Beispiel füge ich dem mittleren Element der Liste in Spalte B die Spalte A hinzu.Zugriff auf eine Liste innerhalb eines Elements eines Pandas DataFrame

import pandas as pd 
df = pd.DataFrame({'A' : (1,2,3), 'B': ([0,1,2],[3,4,5,],[6,7,8])}) 
df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1] 
df 

Gibt es einen besseren Weg, dies zu tun?

Antwort

1

Eine Möglichkeit ist es, die apply zu verwenden, die einen Datenrahmen aus ihm heraus, als die Schaffung schneller sein sollte:

df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 

Einige Geschwindigkeitstest:

%timeit df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1] 
# 1000 loops, best of 3: 567 µs per loop 
%timeit df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 
# 1000 loops, best of 3: 406 µs per loop 
%timeit df['C'] = df['A'] + df['B'].apply(lambda x:x[1]) 
# 1000 loops, best of 3: 250 µs per loop 

OK. Etwas besser. @ Breucopters Antwort ist die schnellste.

+0

Danke. Sehr geschätzt! – Michael

4

Etwas einfacher ist:

df['C'] = df['A'] + df['B'].apply(lambda x:x[1]) 
+0

Danke für die blitzschnelle Antwort! – Michael

0

Sie können auch einfach versuchen Sie Folgendes:

df['C'] = df['A'] + df['B'].str[1] 

Leistung dieser Methode:

%timeit df['C'] = df['A'] + df['B'].str[1] 
#1000 loops, best of 3: 445 µs per loop 
Verwandte Themen