#python #pandas #multi-index
#питон #панды #многоиндексный
Вопрос:
В основном я делаю следующее, и я думаю, что, вероятно, есть более быстрый способ, чем выполнение 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])
Комментарии:
1. Это сильно ускорило процесс… примерно от 3,5 секунд до 0,65 секунды! Спасибо