У меня есть рабочий код, который повторяет df
и возвращает return other_df
.Я пытаюсь векторизовать это, поскольку это медленно.Пытаюсь создать func
до df.apply(func)
.
Полученный фрейм данных имеет большую длину, поэтому мне кажется, что мне нужно вернуть другой фрейм данных в результате .apply
.
Мой начальный df
представляет собой список квартиры , которые содержат столбец списков из комнат и их свойства.
Каждая строка содержит что-то вроде этого:
rooms | apartment number
[['375', 'LET', ''], | 12345
['335', 'LET', ''], |
['360', 'LET', ''], |
['295', 'double', ''],|
['360', 'LET', '']] |
__________________________________________________
Мне нужен результирующий df, такой как:
apartment number | room number | price | if let
12345 | 12345-1 | 375 | True
12345 | 12345-2 | 335 | True
12345 | 12345-3 | 360 | True
12345 | 12345-4 | 295 | False
12345 | 12345-5 | 360 | True
Результирующий df должен бытьdf
из номеров .Во время трансформации выполняется некоторая очистка и извлечение данных, включая присвоение номера комнаты на основе индекса объекта в списке, сохраненного в начальной ячейке df, что, я не уверен, возможно ли вообще векторизовать (?)
Я считаю свои варианты более влажными, чтобы выполнить все сразу с .apply
, если это возможно.Если это не так, то мне нужно покрыть начальную df
в многоиндексную, а затем развернуть таблицу.
Мой черновой код выглядит следующим образом:
def rooms_df(row):
columns=['room_price',
'room_type',
'en_suite',
'if_let',
'room_number',
'listing_id']
df = pd.DataFrame(columns=columns)
for room in row['rooms']:
number=0
if room[0] == 'na':
room_price = None
room_type = None
en_suite = None
if_let = None
elif room[0] == 'occupied':
room_price = None
room_type = None
en_suite = None
if_let = True
else:
room_price = room[0]
if 'single' in room:
room_type = 'single'
elif 'double' in room:
room_type = 'double'
else:
room_type = None
if 'suite' in room:
en_suite = True
else:
en_suite = False
if 'LET' in room:
if_let = True
else:
if_let = False
listing_id = row['listing_id']
number = number+1
room_number = f'{listing_id}-{number}'
Спасибо заваши идеи!