如何在for循环中合并DataFrame?

Blu*_*ant 1 python database numpy dataframe pandas

我正在尝试将 for 循环中的多索引数据帧合并到索引上的单个数据帧中。

我在https://gist.github.com/RJUNS/f4ad32d9b6da8cf4bedde0046a26f368#file-prices-py有一个可重现的代码 我想在这里发布代码,但我收到一个错误“你的帖子有很多代码”,所以我发布了要点。

但它产生了这个:

                          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
Run Code Online (Sandbox Code Playgroud)

我期待以下输出:

                          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
Run Code Online (Sandbox Code Playgroud)

我尝试使用.join方法,但我无法使其工作。请问有人有任何解决方案吗?

jez*_*ael 5

我认为您需要附加dflist of DataFrames然后使用concatwith 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
Run Code Online (Sandbox Code Playgroud)

List comprehension创建版本list of DataFrames

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
Run Code Online (Sandbox Code Playgroud)