У меня есть dataframe pandas со столбцом, содержащим значения или списки значений (неравной длины). Я хочу «развернуть» строки, поэтому каждое значение в списке становится единственным значением в столбце. Пример говорит, что это все:Итерация по строкам и расширение pandas dataframe
dfIn = pd.DataFrame({u'name': ['Tom', 'Jim', 'Claus'],
u'location': ['Amsterdam', ['Berlin','Paris'], ['Antwerp','Barcelona','Pisa'] ]})
location name
0 Amsterdam Tom
1 [Berlin, Paris] Jim
2 [Antwerp, Barcelona, Pisa] Claus
Я хочу, чтобы превратиться в:
dfOut = pd.DataFrame({u'name': ['Tom', 'Jim', 'Jim', 'Claus','Claus','Claus'],
u'location': ['Amsterdam', 'Berlin','Paris', 'Antwerp','Barcelona','Pisa']})
location name
0 Amsterdam Tom
1 Berlin Jim
2 Paris Jim
3 Antwerp Claus
4 Barcelona Claus
5 Pisa Claus
Я первый попытался с помощью применить, но это не возможно, чтобы вернуться несколько серии, насколько я знаю. Кажется, это и есть трюк. Но ниже код дает мне пустой dataframe ...
def duplicator(series):
if type(series['location']) == list:
for location in series['location']:
subSeries = series
subSeries['location'] = location
dfOut.append(subSeries)
else:
dfOut.append(series)
for index, row in dfIn.iterrows():
duplicator(row)
Я получаю сообщение об ошибке, возможно, из-за странных данных (это может быть вызвано значениями emtpy в некоторых списках?): InvalidIndexError: переиндексирование действует только с однозначно оцененными объектами индекса – bowlby
Это может произойти, если один из ваших списков местоположений содержит повторяющиеся элементы. Как вы хотите, чтобы дублированные адреса (для одного и того же человека) обрабатывались? – unutbu
повторяющиеся значения должны быть «объединены» (например, только один должен быть сохранен в результате), пустые значения должны игнорироваться. – bowlby