在一些操作之后,我有一个看起来像这样的数据框。
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行。
答案 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'] != '[]']