大家。我有以下数据框列表:
df_eurusd = DownloadData('EUR/USD',start_date,end_date,timeframe).GetData()
df_usdjpy = DownloadData('USD/JPY',start_date,end_date,timeframe).GetData()
df_gbpusd = DownloadData('GBP/USD',start_date,end_date,timeframe).GetData()
df_usdcad = DownloadData('USD/CAD',start_date,end_date,timeframe).GetData()
df_usdsek = DownloadData('USD/SEK',start_date,end_date,timeframe).GetData()
df_usdchf = DownloadData('USD/CHF',start_date,end_date,timeframe).GetData()
tickers = {
'EUR/USD' : df_eurusd,
'USD/JPY' : df_usdjpy,
'GBP/USD' : df_gbpusd,
'USD/CAD' : df_usdcad,
'USD/SEK' : df_usdsek,
'USD/CHF' : df_usdchf
}
每个数据帧都有以下格式:
Timestamp Open High Low Close
0 2023-01-10 00:00:00+00:00 1.07324 1.07381 1.07205 1.07273
1 2023-01-10 01:00:00+00:00 1.07273 1.07396 1.07259 1.07360
2 2023-01-10 02:00:00+00:00 1.07360 1.07424 1.07212 1.07308
3 2023-01-10 03:00:00+00:00 1.07309 1.07341 1.07255 1.07321
4 2023-01-10 04:00:00+00:00 1.07323 1.07339 1.07278 1.07306
... ... ... ... ... ...
5729 2023-12-08 17:00:00+00:00 1.07448 1.07575 1.07402 1.07560
5730 2023-12-08 18:00:00+00:00 1.07560 1.07623 1.07528 1.07571
5731 2023-12-08 19:00:00+00:00 1.07572 1.07616 1.07565 1.07587
5732 2023-12-08 20:00:00+00:00 1.07587 1.07664 1.07569 1.07636
5733 2023-12-08 21:00:00+00:00 1.07636 1.07642 1.07578 1.07592
我需要做的是获得这样的东西:
Timestamp EUR/USD USD/JPY GBP/USD USD/CAD ...
0 2023-01-10 00:00:00+00:00 1.07324 1.07381 1.07205 1.07273
1 2023-01-10 01:00:00+00:00 1.07273 1.07396 1.07259 1.07360
2 2023-01-10 02:00:00+00:00 1.07360 1.07424 1.07212 1.07308
... ... ... ... ... ...
基本上提取每个数据帧的“关闭”列并将其插入到一个新的数据帧中,该数据帧收集按同一日期(“时间戳”)索引的所有“关闭”列。
我尝试了很多其他人在这里建议的事情,但我无法实现。一个重要的部分是不必手动输入最终 df 的每一列的名称,因为当然,我可能会使用多达 100 个数据帧,并且我无法手动输入每个数据帧。
谢谢。
concat
和字典理解:
out = pd.concat({k: x.set_index('Timestamp')['Close']
for k, x in tickers.items()},
axis=1).reset_index()
假设您想获得
EUR/USD
和 USD/JPY
:
tickers = ['EUR/USD', 'USD/JPY']
tickers
中的每个元素:
DownloadData
Timestamp
和 Close
dfs_close
keys
参数创建带有 tickers
Close
列级别这是完整的代码:
tickers = ['EUR/USD', 'USD/JPY']
dfs_close = []
for ticker in tickers:
df = DownloadData('EUR/USD',start_date,end_date,timeframe).GetData()
df = df[['Timestamp', 'Close']].set_index('Timestamp')
dfs_close.append(df)
merged_df = pd.concat(dfs_close, axis=1, keys=tickers)
merged_df.columns = merged_df.columns.droplevel(1)