думаю нужно melt
:
df2 = df.join(pd.DataFrame(df.pop('locations').values.tolist(), index=df.index)).melt('Id')
Или stack
:
s = (pd.DataFrame(df.pop('locations').values.tolist(), index=df.index)
.stack()
.reset_index(level=1, drop=True))
df2 = df.join(s.rename('new'))
Или просто решение с повторяющимися значениями Id
и вложенным расширением list
s:
df2 = pd.DataFrame({
"Id": np.repeat(df.Id.values, df.locations.str.len()),
"new": list(chain.from_iterable(df.locations))})
print (df2)
Id new
0 1 {'timestamp': '2018-05-28 15:00:00', 'lat': 0.0}
1 1 {'timestamp': '2018-05-28 16:00:00', 'lat': 0.0}
2 2 {'timestamp': '2018-05-28 10:00:00', 'lat': 0.0}
3 2 {'timestamp': '2018-05-28 17:00:00', 'lat': 0.0}
4 2 {'timestamp': '2018-05-28 18:00:00', 'lat': 0.0}
Настройка
df = pd.DataFrame({'Id':[1,2],
'locations':[[{'timestamp': '2018-05-28 15:00:00', 'lat': 0.0}, {'timestamp': '2018-05-28 16:00:00', 'lat': 0.0}],
[{'timestamp': '2018-05-28 10:00:00', 'lat': 0.0}, {'timestamp': '2018-05-28 17:00:00', 'lat': 0.0}, {'timestamp': '2018-05-28 18:00:00', 'lat': 0.0}]]})
print (df)
Id locations
0 1 [{'timestamp': '2018-05-28 15:00:00', 'lat': 0...
1 2 [{'timestamp': '2018-05-28 10:00:00', 'lat': 0...