2016-11-12 71 views
1

我有一个数据帧DF:拆分数据帧列,包括在多行列表列表插入熊猫

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']) 

我想分裂COL1,包括列出的名单,对多条线路如下:

 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 

和下一分割COL1在2列,仅保留第二和第三元件

 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 

如何它可以做到使用熊猫吗?

+0

你'DF '定义不会产生你输出的内容 – piRSquared

回答

0

对于第一步,可能没有什么比一个循环更好:

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'])) 

对于第二步,只需添加新列和删除原来的一个:

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']