python - 如何在for循环中合并DataFrame?

标签 python database pandas numpy dataframe

我正在尝试将 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

我期待以下输出:

                          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 附加到 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 创建 DataFrame 列表 的版本:

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

关于python - 如何在for循环中合并DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117577/

相关文章:

python - 根据其他数组以有效的方式减少 numpy 数组中的数据

python - 正向回顾没有达到我的预期

python - 我需要你关于 python pandas 中 read_fwf 的帮助

php - 检索Mysql数据失败...为什么?

c# - 如何从父表单中的另一个 datagridview 更新子表单的 datagridview

python - 使用groupby agg后索引变化

python - 使用 Beautiful Soup 获取特定的 tr 元数据

python - Scrapy 集群 kafka_monitor.py 中断

php - 如何从数据库中提取特定值,并将其显示为纯文本而不是表中

python - 将 Pandas 数据框转换为列表