#pandas #dataframe
#pandas #фрейм данных
Вопрос:
У меня есть следующий фрейм данных.
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
Кто-нибудь может показать мне, как это сделать. Большое спасибо.
Ответ №1:
Используйте DataFrame.explode
для преобразования вложенных списков в ряды, а затем создайте новые столбцы с помощью 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