首页 > 解决方案 > 从多个 excel 工作表在同一索引上附加熊猫数据框

问题描述

我遇到了以下问题,这是一个简单的代码,可以计算体育数据集上的一些平均值。如果需要,我可以提供这些数据的示例。

现在尝试将生成的数据帧背靠背附加,这是我无法做到的。基本上我想获取所有数据集(这里有两个,但要使用更多),并根据输出生成时间线。所有文件都有相同的列和索引。下面是我正在使用的代码:

import pandas as pd

season_list = ["2017-2018","2018-2019"]
excl_value = 10
header_list = []

for seas in season_list:
    excel_sheet = pd.read_excel(r'Data\NData' + str(seas) + '.xlsx')
    excel_sheet = excel_sheet.fillna(value = 0)
    headers = excel_sheet.columns.values.tolist()
    if headers not in header_list:
        header_list.append(headers)
    for header in header_list:
        data_mean = excel_sheet[header][excel_sheet.games >=                         
excl_value].mean()
        data_mean = round(data_mean,2)
        print(data_mean)

有了这个,我只需得到两个数据集,如下所示:

age                   25.42
games                 22.42
games_starts          18.19

age                   24.95
games                 27.18
games_starts          22.00

这些是针对少数变量的两种不同平均值计算的结果。现在理想情况下,我希望将这些按文件和同时按相同的索引进行分解。我会看到它的工作方式如下:

                    2017-2018  2018-2019
age                   25.42      24.95
games                 22.42      27.18
games_starts          18.19      22.00

像这样,我可以一起创建价值观的时间线。然而努力实现这一目标。我应该如何将计算运行合并为一组?谢谢!

我已经测试了一些实现这一目标的方法。一个只是简单地将 .append 附加到 excel 工作表中,但我看到一些值没有组合在一起的问题。我还考虑过只获取平均计算并将它们应用到他们自己的字典/列表/数据框,但我还没有设法将它们实际推入他们自己的集合中。

标签: pythonpandas

解决方案


你可以通过3个步骤很好地做到这一点。加载:

sports_data = [pd.read_excel(r'Data\NData' + str(season) + '.xlsx') for season in season_list]

现在您想添加一列来标识每个工作表,以便您可以在下一步中对其进行分组:

for i, season in enumerate(season_list):
    sports_data[i]['season'] = season

合并为一个 DataFrame:

sports_data = pd.concat(sports_data)

现在我们准备按季节分组并取平均值:

sports_data.groupby('season').mean()

这会给你

                  age       games   games_starts
season          
2017-2018   26.666667   33.000000   22.333333
2018-2019   25.666667   25.666667   19.000000

现在剩下的只是将其转置以获得您想要的:

sports_data.groupby('season').mean().T

在此处输入图像描述


推荐阅读