У меня есть три кадра данных временных рядов
df_list=[px, SC, SMA]
Каждый фрейм данных имеет одинаковые столбцы и одинаковые даты. У меня также есть список ценных бумаг (сокращенный для примера):
securities3=['SPX Index','BIL US Equity']
Я пытаюсь сделать что-то вроде приведенного ниже, но у него нет правильного синтаксиса:
for df in df_list:
for col in df.columns:
if col==securities3:
***create new dataframe here***
Другими словами, я хочу перебрать каждый фрейм данных в df_list, в каждом столбце df, когда столбец соответствует компонентам ценных бумаг3, я хочу, чтобы новый фрейм данных был сформирован с этими тремя столбцами (один столбец из каждого фрейма данных, соответствующий списку ценных бумаг3 .
Чтобы предоставить более подробную информацию, пожалуйста, смотрите ниже примеры данных:
import pandas as pd
px_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
'SPX Index': [58.63, 21.25, 19.17, 18.8],
'BIL US Equity': [35,105,27,98]}
SC_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
'SPX Index': [20.50, 6, 82, 74.6],
'BIL US Equity': [74,62,8,99]}
SMA_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
'SPX Index': [2, 95.3, 39, 68.27],
'BIL US Equity': [58,37,74,11]}
px = pd.DataFrame(px_data)
SC = pd.DataFrame(SC_data)
SMA = pd.DataFrame(SMA_data)
Целевой результат:
SPX_data = {'Date': ['8/11/18', '8/12/18', '8/13/18', '8/14/18'],
'SPX Index': [58.63, 21.25, 19.17, 18.8],
'SPX Index': [20.50, 6, 82, 74.6],
'SPX Index': [2, 95.3, 39, 68.27]}
SPX = pd.DataFrame(SPX_data)
Я пытаюсь создать фрейм данных SPX (например) в цикле, потому что список (ценные бумаги3) может измениться. Кроме того, в качестве ориентира, поскольку это часть более крупного процесса, столбцы в кадрах данных всегда будут идентичны строкам (и позициям) в списке, как в этом примере.
Спасибо за помощь.
🤔 А знаете ли вы, что...
В Python есть инструменты для тестирования кода, такие как библиотека unittest.
Предполагая, что все фреймы данных имеют одинаковые даты в одном и том же порядке, вы можете объединить даты + столбцы со значениями axis=1
:
date = df_list[0]["Date"]
out = [pd.concat([date] + [df[sec] for df in df_list], axis=1) for sec in securities3]
for df in out:
print(df)
Date SPX Index SPX Index SPX Index
0 8/11/18 58.63 20.5 2.00
1 8/12/18 21.25 6.0 95.30
2 8/13/18 19.17 82.0 39.00
3 8/14/18 18.80 74.6 68.27
Date BIL US Equity BIL US Equity BIL US Equity
0 8/11/18 35 74 58
1 8/12/18 105 62 37
2 8/13/18 27 8 74
3 8/14/18 98 99 11
Обновлять:
Если 'Date'
— это индекс, удалите дату из вызова concat
.
Если вы хотите, чтобы каждый фрейм данных был в переменной, удалите внешний цикл в понимании списка.
for sec in securities3:
df = pd.concat([df[sec] for df in df_list], axis=1)