我正在尝试将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中,然后将concatsort_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

07-24 15:34