熊猫在每一行中创建列表组合

时间:2017-11-26 19:09:25

标签: python pandas numpy

在一些操作之后,我有一个看起来像这样的数据框。

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

从那以后,我想制作两列和多行,例如这个

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

基本上,对于前面的给定行,如果单元格中的列表具有N个值,则数据帧的新列W中将有N行,而在另一个新列Z中将放置最后一个值但是那部分会很容易。我更关心的是第一部分,即生成N行。

1 个答案:

答案 0 :(得分:1)

我的建议是将列表视为列表,创建一个能够执行所需操作的函数并遍历列表,这些内容如下:

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'] != '[]']