【问题标题】: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)

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

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

    1. 从您的元组数据创建迭代器
    2. 在迭代器上应用方法来解析数据帧并将其准备为所需的格式
    3. 在数据帧列表上应用一次 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 秒!谢谢
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2021-06-01
    • 2021-06-06
    • 2021-06-06
    • 2015-03-24
    • 2017-04-10
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多