2017-11-26 2 views
0

Ich habe ein Datenframe, das nach einigen Operationen so aussieht.Pandas erstellen eine Kombination von Listen in jeder Zeile

x y 
0 0 [167, 171, 249, 1] 
1 1 [285, 305, 291] 

Von dort Ich möchte zwei Spalten und mehrere Zeilen machen, wie diese

w     z 
0 [167, 171, 249]  [1] 
1 [167, 171]   [249] 
2 [167]    [171] 
3 [285, 305]   [291] 
4 [285]    [305] 

Grundsätzlich für eine bestimmte Zeile in I der zuvor, wenn die Liste in der Zelle hat dann N-Werte Es wird N Zeilen in der neuen Spalte W des Datenrahmens geben und in einer anderen neuen Spalte Z wird der allerletzte Wert platziert, aber dieser Teil wird einfach sein. Ich interessiere mich eher für den ersten Teil, das heißt für das Erzeugen von N Zeilen.

Antwort

1

mein Vorschlag ist nur die Listen als Listen behandeln, eine Funktion erstellen, das tut, was Sie wollen, und durchlaufen die Listen, etwas in dieser Richtung:

df = pd.DataFrame() 
df['x'] = [0,1] 
df['y'] = [[167, 171, 249, 1], [285, 305, 291]] 

def expand_list(row_list): 
    final_list = [] 
    final_list.append(row_list) 
    n = -1 
    while n> len(row_list)*-1: 
     final_list.append(row_list[:n]) 
     n-=1 
    return final_list 

result_df = pd.DataFrame() 
result_df['w'] = sum([expand_list(l) for l in df['y']],[]) 
result_df['z'] = [l[-1] for l in result_df['w']] 
result_df['w'] = [l[:-1] for l in result_df['w']] 
result_df = result_df[result_df.astype(str)['w'] != '[]'] 
Verwandte Themen