Идея заключается в использовании списочного понимания с вложенным словарным пониманием для списка диктовок с новыми ключами, сгенерированными с помощью enumerate
, переходом к конструктору Dataframe
и DataFrame.join
к оригиналу, а также DataFrame.pop
используется для столбца извлечения B
:
L = [{f'{k}_{i}': v for i, y in enumerate(x) for k, v in y.items()} for x in df.pop('B')]
df = df.join(pd.DataFrame(L, index=df.index))
print (df)
A X_0 Y_0 X_1 Y_1
0 a x1 y1 NaN NaN
1 b x2 y2 x3 y3
2 c NaN NaN NaN NaN
РЕДАКТИРОВАТЬ:
df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [
[{'X': 'x1', 'Y': 'y1'}],
[{'X': 'x2', 'Y': 'y2'}, {'X': 'x3', 'Y': 'y3'}],
np.nan
]})
L = [{f'{k}_{i}': v for i, y in enumerate(x) for k, v in y.items()}
if isinstance(x, list)
else {} for x in df.pop('B')]
df = df.join(pd.DataFrame(L, index=df.index))
print (df)
A X_0 Y_0 X_1 Y_1
0 a x1 y1 NaN NaN
1 b x2 y2 x3 y3
2 c NaN NaN NaN NaN