我有以下数据框。
a1 = [1,2,3]
a2 = [[[11,'a'],[12, 'b'],[13,'c']], [[21,'a'],[22, 'a']], [[31, 'b']]]
df = pd.DataFrame({'col1': a1,
'col2': a2})
col1 col2
0 1 [[11, a], [12, b], [13, c]]
1 2 [[21, a], [22, a]]
2 3 [[31, b]]
我想将其转换为该数据框
c1 c2 c3
1 11 a
1 12 b
1 13 c
2 21 a
2 22 a
3 31 b
谁能告诉我该怎么做。非常感谢。
答案 0 :(得分:1)
使用DataFrame.explode
将嵌套列表转换为Series,然后由DataFrame
cosntructor创建新列:
df = df.explode('col2').rename(columns={'col1':'c1'}).reset_index(drop=True)
df[['c2','c3']] = pd.DataFrame(df.pop('col2').tolist(), index=df.index)
print (df)
c1 c2 c3
0 1 11 a
1 1 12 b
2 1 13 c
3 2 21 a
4 2 22 a
5 3 31 b
或者对元组使用扁平嵌套列表的列表理解:
L = [(v['col1'], x[0], x[1]) for k, v in df.to_dict('index').items() for x in v['col2']]
df = pd.DataFrame(L, columns=['c1','c2','c3'])
print (df)
c1 c2 c3
0 1 11 a
1 1 12 b
2 1 13 c
3 2 21 a
4 2 22 a
5 3 31 b