如何加速代码从字典列表中获取数据

2024-09-30 00:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,id和日期作为索引,ShopData作为列,如下所示: shopdata

如您所见,有一个以“ValueType”和“Value”为键的字典列表。如果“ValueType”等于“coffee”,则可以提取“Value”键下的数据。然后我需要这些数据来做一些计算

我下面的代码工作正常,但速度很慢:

ids = data.index.get_level_values(0)
df = pd.DataFrame(float(0),index = ids , columns=['coffeedata'] )

for i in range(len(ids)):
    for item in data.loc[ids[i], 'ShopData'][0] :
        if item["ValueType"] == 'coffee':
            df.iloc[i]['coffeedata']=  float(item['Value'] )

瓶颈在哪里?你知道如何让代码运行得更快吗?谢谢


Tags: 数据inididsdffordataindex
2条回答

试试这个:

data['ShopData'].apply(lambda x: [i['value'] for i in x if i["ValueType"]=='coffee'])

当ValueType为coffee时,它将创建一列,其中包含包含值的列表

运行:

df = data.ShopData.reset_index(level=1, drop=True).apply(
    lambda sd: [ dct['Value'] for dct in sd if dct['ValueType'] == 'coffee'][0] )\
    .astype(float).rename('coffeedata').to_frame()

我测试了4000行样本的执行时间(使用%timeit)。 您的代码在5.11s中执行,而我的代码在5.42ms中执行(快940倍)

相关问题 更多 >

    热门问题