创建由多个数据框组成的多级熊猫数据框的最快方法是啥?

Posted

技术标签:

【中文标题】创建由多个数据框组成的多级熊猫数据框的最快方法是啥?【英文标题】:What is the fastest way to create one a multilevel pandas dataframe made from multiple dataframes?创建由多个数据框组成的多级熊猫数据框的最快方法是什么? 【发布时间】:2022-01-11 00:31:42 【问题描述】:

基本上我正在执行以下操作,我认为可能有比在每个循环中执行 pd.concat 和 df.append 更快的方法?

final_df = pd.DataFrame()
for (key, data, date) in data_tuples:
    df = pd.DataFrame(data, columns=['Price', 'Quantity'])
    timestamp = datetime.strptime(date, '%a, %d %b %Y %H:%M:%S GMT')
    df = pd.concat([df], axis=0, keys=[timestamp])
    df = pd.concat([df], axis=0, keys=[key])
    final_df = final_df.append(df)

final_df.index = final_df.index.rename(['symbol', 'time', 'row'])
final_df['Price'] = final_df['Price'].apply(float)
final_df['Quantity'] = final_df['Quantity'].apply(float)

【问题讨论】:

【参考方案1】:

为了避免在每个步骤中追加和连接,您可以:

    从您的元组数据创建迭代器 在迭代器上应用方法来解析数据帧并将其准备为所需的格式 在数据帧列表上应用一次 pd.concat。

当然,您需要修改逻辑以满足您想要的输出,但我希望它能让您掌握方法。

import pandas as pd
from datetime import datetime



data_tuples = (("1", "Price": [1,2], "Quantity":[1,2], "20:20:20"), ("1", "Price": [3,4], "Quantity":[3,4], "20:20:30"))


def parse_values(data, date):
    df = pd.DataFrame(data, columns=['Price', 'Quantity'])
    df["date"] = date
    return df


df = pd.concat([parse_values(data,date) for _,data,date in data_tuples])

【讨论】:

这加快了很多...从大约 3.5 秒到 0.65 秒!谢谢

以上是关于创建由多个数据框组成的多级熊猫数据框的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框的行之间应用多个条件创建目标数据框

在 C# 中填充组合框的最快方法是啥? [关闭]

需要一种从现有数据框创建熊猫数据框的方法

创建多级熊猫数据框

过滤熊猫数据框中值的最快方法

带有熊猫数据框的子图