2016-11-12 2 views
1

ich einen Datenrahmen df haben:Split-Datenrahmen Spalte einschließlich der Liste der Listen auf mehrere Zeilen in Pandas

import pandas as pd 
df = pd.DataFrame([ 
    [[[3,0.5, 0.4, 0.7, 5],[2, 0.5, 1, 0.8, 2],[1, 0.5, 1, 1, 2]], 'b'], 
    [[[1, 0.5, 0.6, 0.01, 1],[2, 0.5, 0.3, 0.2, 3],[1, 0.8, 1.0, 0.04, 3]], 'd']], 
    index = ['row1', 'row2'], 
    columns=['col1', 'col2']) 

Ich möchte col1 aufzuspalten, einschließlich der Liste der Listen, auf mehrere Zeilen wie folgt:

 col1     col2 
row1 [3,0.5, 0.4, 0.7, 5] b 
row1 [2, 0.5, 1, 0.8, 2]  b 
row1 [1, 0.5, 1, 1, 2]  b 
row2 [1, 0.5, 0.6, 0.01, 1] d 
row2 [2, 0.5, 0.3, 0.2, 3] d 
row2 [1, 0.8, 1.0, 0.04, 3] d 

und neben Split spalte1 in 2 Spalten,

nur die zweiten und die dritten Halteelemente
 new_col1 new_col2 col2 
row1 0.5  0.4  b 
row1 0.5  1   b 
row1 0.5  1   b 
row2 0.5  0.6  d 
row2 0.5  0.3  d 
row2 0.8  1.0  d 

Wie Es kann mit Pandas gemacht werden?

+0

Ihre 'df 'Definition produziert nicht, was Sie ausgegeben haben – piRSquared

Antwort

0

Für den ersten Schritt kann es nichts Besseres als eine Schleife:

df2 = pd.DataFrame() 
for row in df.index: 
    col = df.ix[row, 'col1'] 
    N = len(col) 
    df2 = df2.append(pd.DataFrame(
     [[c, df.ix[row, 'col2']] for c in col], 
     index=[row] * N, 
     columns = ['col1', 'col2'])) 

Für den zweiten Schritt, nur die neuen Spalten hinzufügen und das Original löschen:

df3 = df2.copy() 
df3['new_col1'] = [c[1] for c in df3['col1']] 
df3['new_col2'] = [c[2] for c in df3['col1']] 
del df3['col1'] 
Verwandte Themen