【发布时间】:2019-07-23 18:20:06
【问题描述】:
我有一个工作代码,它迭代 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 应该是 rooms 的 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}'
感谢您的想法!
【问题讨论】:
标签: python pandas vectorization apply