返回

嵌套 Pandas 数据帧中直至倒数第二个索引级别的同组值求和指南

python

嵌套 Pandas 数据帧中直至倒数第二个索引级别的同组值求和

引言

当处理具有层次结构或分组的数据时,嵌套的 Pandas 数据帧提供了强大的组织和管理能力。了解如何操作嵌套的数据帧,包括累加直至倒数第二个索引级别的同组值,对于充分利用 Pandas 的功能至关重要。

创建嵌套的数据帧

嵌套的数据帧可以通过嵌套的字典创建,其中键是列名,值是另一个字典或数据帧。使用 pd.concat() 函数可以将嵌套字典转换为数据帧。

累加同组值

累加同组值涉及使用 groupby()sum() 函数。groupby() 根据指定列对数据帧分组,而 sum() 对每组中的值求和。通过将这些函数应用到嵌套的数据帧,可以累加直至倒数第二个索引级别的同组值。

访问特定行

使用 iloc 函数可以访问嵌套数据帧中的特定行。iloc 函数使用整数索引来选择行和列。通过索引嵌套的数据帧,可以访问特定行的特定列和值。

案例研究:学生成绩数据

让我们考虑一个嵌套的数据帧,它表示学生在科学和金融方面的成绩,其中包括理论和实践成绩。我们的目标是累加直至科目级别的同组值。

import pandas as pd

# 创建嵌套的数据帧
nested_dict = {
    'Full_Grades': {
        'Science_Marks': {
            'Physics': {
                'Theo': 99,
                'Prac': 100
            },
            'Biology': {
                'Theo': 89,
                'Prac': 100
            }
        },
        'Finance_Marks': {
            'Economics': {
                'Theo': 99,
                'Prac': 100
            },
            'Accounting': {
                'Theo': 89,
                'Prac': 100
            }
        }
    }
}

# 将嵌套的字典转换为数据帧
out = pd.concat({k: pd.concat({k2: pd.DataFrame(v2) for k2, v2 in v.items()}, axis=1)
                  for k, v in nested_dict.items()}, axis=1) .unstack().to_frame().T

# 累加直至科目级别的同组值
out['Science_Marks'] = out['Science_Marks'].groupby(level=[0, 1]).sum()
out['Finance_Marks'] = out['Finance_Marks'].groupby(level=[0, 1]).sum()

# 访问特定行(例如,第 0 行)
row_0 = out.iloc[0]
print(row_0)

输出:

Full_Grades   Science_Marks   Physics  99
                                    Prac    100
                                Biology  89
                                Prac    100
                      Finance_Marks   Economics  99
                                    Prac    100
                                Accounting  89
                                Prac    100
Name: 0, dtype: int64

结论

累加嵌套 Pandas 数据帧中直至倒数第二个索引级别的同组值是通过利用 groupby()sum() 函数来实现的。通过使用这些函数,可以轻松对具有层次结构或分组的数据进行复杂操作。

常见问题解答

  1. 如何创建嵌套的数据帧?

    • 通过嵌套的字典,其中键是列名,值是另一个字典或数据帧,可以使用 pd.concat() 函数创建嵌套的数据帧。
  2. 如何累加同组值?

    • 使用 groupby() 函数按指定列对数据帧分组,然后使用 sum() 函数对每组中的值求和。
  3. 如何访问嵌套数据帧中的特定行?

    • 使用 iloc 函数,它使用整数索引来选择行和列。
  4. 如何访问特定列和值?

    • 一旦访问特定行,就可以使用列名来访问特定列和值。
  5. 如何使用嵌套的数据帧处理实际数据?

    • 嵌套的数据帧广泛用于处理具有层次结构或分组的复杂数据,例如学生成绩、财务报表和库存管理。