返回

Pandas GroupBy 多重索引转换:从 Series 轻松还原至 DataFrame

python

Pandas GroupBy 多重索引:从 Series 转换回 DataFrame

问题

如果你对 Pandas DataFrame 执行 GroupBy 操作,就会得到一个多重索引的 GroupBy 对象。但是,你可能希望将其转换回一个包含所有行的 DataFrame。

解决方案

将 Pandas GroupBy 多重索引输出从 Series 转换回 DataFrame 的步骤如下:

1. 重置索引

首先,使用 reset_index() 方法重置 GroupBy 对象的索引,将其转换为一个具有原始列名的 DataFrame:

df_reset = g1.reset_index()

2. 设置索引

然后,使用 set_index() 方法将所需的列设置为 DataFrame 的索引:

df_final = df_reset.set_index(['Name', 'City'])

示例

为了演示,我们创建一个示例 DataFrame:

import pandas as pd

df = pd.DataFrame({'City': ['Seattle', 'Seattle', 'Portland', 'Seattle', 'Seattle', 'Portland'],
                   'Name': ['Alice', 'Bob', 'Mallory', 'Mallory', 'Bob', 'Mallory']})

对其执行 GroupBy 操作:

g1 = df.groupby(['Name', 'City'])

然后,重置索引:

df_reset = g1.reset_index()

最后,将所需的列设置为索引:

df_final = df_reset.set_index(['Name', 'City'])

输出:

                  City  Name
Name    City
Alice   Seattle      1     1
Bob     Seattle      2     2
Mallory Portland     2     2
Mallory Seattle      1     1

技巧

  • 如果只想转换特定的列,可以使用 reset_index(level=level_name),其中 level_name 是要重置的索引级别。
  • 如果希望保留多重索引,可以使用 reset_index(),但将 drop=False 传递给它。

常见问题解答

1. 为什么需要将 GroupBy 输出转换为 DataFrame?

这取决于你的用例。如果你需要对分组后的数据执行进一步的操作(例如,合并或操作),将其转换为 DataFrame 可能更方便。

2. GroupBy 操作如何影响原始 DataFrame?

GroupBy 操作不会修改原始 DataFrame。它返回一个新的对象,其中包含分组后的结果。

3. 如何获得特定分组的索引?

要获取特定分组的索引,可以使用 g1.get_group(group_key),其中 group_key 是分组的键。

4. 如何将多个索引列重置为单个列?

可以使用 reset_index(level=[level_name1, level_name2], drop=True) 将多个索引列重置为单个列。

5. 如何保留多重索引中的某些级别?

可以使用 reset_index(level=level_name, drop=False) 保留多重索引中的某些级别。