我正在尝试将for循环中的多索引数据帧合并到索引上的单个数据帧中。
我有一个可重复的代码在https://gist.github.com/RJUNS/f4ad32d9b6da8cf4bedde0046a26f368#file-prices-py
我想在这里发布代码,但我得到了一个错误'你的帖子有很多代码'因此我张贴在gist上。
但它产生了:
CLOSE HIGH LOW OPEN VOLUME
2017-09-08 09:30:00 VEDL 330.2 330.40 328.3 329.10 1873261
2017-09-08 09:45:00 VEDL 333.1 333.15 329.5 330.15 1643970
2017-09-08 10:00:00 VEDL 332.4 333.20 331.4 333.10 767922
CLOSE HIGH LOW OPEN VOLUME
2017-09-08 09:30:00 INFY 892.65 898.6 892.6 898.05 163020
2017-09-08 09:45:00 INFY 892.45 893.6 891.4 892.80 152179
2017-09-08 10:00:00 INFY 891.55 892.5 891.1 892.40 104931
我需要以下输出:
CLOSE HIGH LOW OPEN VOLUME
2017-09-08 09:30:00 VEDL 330.2 330.40 328.3 329.10 1873261
INFY 892.65 898.6 892.6 898.05 163020
2017-09-08 09:45:00 VEDL 333.1 333.15 329.5 330.15 1643970
INFY 892.45 893.6 891.4 892.80 152179
2017-09-08 10:00:00 VEDL 332.4 333.20 331.4 333.10 767922
INFY 891.55 892.5 891.1 892.40 104931
我试过使用
.join
方法,但没能成功。请问有什么解决办法吗?
最佳答案
我认为您需要将df
附加到list of DataFrames
中,然后将concat
与sort_index
一起使用:
dfs =[]
for security in stocks:
dfs.append(get_google_data(security,900, 1))
df = pd.concat(dfs).sort_index()
print(df)
CLOSE HIGH LOW OPEN VOLUME
2017-09-08 06:00:00 INFY 892.65 898.60 892.60 898.05 163020
VEDL 330.20 330.40 328.30 329.10 1873261
2017-09-08 06:15:00 INFY 892.45 893.60 891.40 892.80 152179
VEDL 333.10 333.15 329.50 330.15 1643970
2017-09-08 06:30:00 INFY 891.55 892.50 891.10 892.40 104931
VEDL 332.40 333.20 331.40 333.10 767922
2017-09-08 06:45:00 INFY 891.10 891.55 889.55 891.55 282589
VEDL 332.10 332.80 331.30 332.40 384417
2017-09-08 07:00:00 INFY 890.90 891.60 890.25 891.10 119252
VEDL 332.15 332.70 331.65 332.05 345358
List comprehension
创建版本:df = pd.concat([get_google_data(x,900, 1) for x in stocks]).sort_index()
print(df)
CLOSE HIGH LOW OPEN VOLUME
2017-09-08 06:00:00 INFY 892.65 898.60 892.60 898.05 163020
VEDL 330.20 330.40 328.30 329.10 1873261
2017-09-08 06:15:00 INFY 892.45 893.60 891.40 892.80 152179
VEDL 333.10 333.15 329.50 330.15 1643970
2017-09-08 06:30:00 INFY 891.55 892.50 891.10 892.40 104931
VEDL 332.40 333.20 331.40 333.10 767922
2017-09-08 06:45:00 INFY 891.10 891.55 889.55 891.55 282589
VEDL 332.10 332.80 331.30 332.40 384417
2017-09-08 07:00:00 INFY 890.90 891.60 890.25 891.10 119252
VEDL 332.15 332.70 331.65 332.05 345358