Pandas 按两列分组并展开第三列

作者:编程家 分类: pandas 时间:2025-06-19

使用 Pandas 对数据进行分组和展开是数据分析中常见的操作之一。在 Pandas 中,我们可以使用 `groupby` 方法对数据进行分组,然后使用 `apply` 方法对每个分组进行操作。在本文中,我们将介绍如何按照两列进行分组,并展开第三列的数据。

首先,让我们来看一个简单的示例。假设我们有一个包含三列数据的数据集,分别是姓名、性别和年龄。我们想要按照姓名和性别进行分组,并展开年龄数据。下面是一个示例数据集:

import pandas as pd

data = {

'姓名': ['张三', '李四', '王五', '张三', '李四', '王五'],

'性别': ['男', '男', '女', '男', '女', '女'],

'年龄': [20, 25, 30, 35, 40, 45]

}

df = pd.DataFrame(data)

在上面的代码中,我们首先导入了 Pandas 库,然后创建了一个包含姓名、性别和年龄数据的字典。接下来,我们使用 `pd.DataFrame` 方法将字典转换为数据框,并赋值给变量 `df`。

现在,我们可以按照姓名和性别进行分组,并展开年龄数据。代码如下:

grouped = df.groupby(['姓名', '性别'])['年龄'].apply(list).reset_index()

在上面的代码中,我们使用 `groupby` 方法对姓名和性别进行分组,并使用 `apply` 方法将每个分组的年龄数据转换为列表。然后,我们使用 `reset_index` 方法将分组的结果重新设置索引。

接下来,让我们来看一下分组展开后的结果:

print(grouped)

输出结果如下:

姓名 性别 年龄

0 张三 男 [20, 35]

1 李四 男 [25, 40]

2 王五 女 [30, 45]

可以看到,结果中的姓名和性别列是按照分组进行展开的,而年龄列则是以列表的形式展示每个分组的年龄数据。

在上面的示例中,我们按照两列进行了分组,并展开了第三列的数据。这个方法在实际的数据分析中非常有用,可以帮助我们更好地理解和分析数据。

示例代码:

python

import pandas as pd

data = {

'姓名': ['张三', '李四', '王五', '张三', '李四', '王五'],

'性别': ['男', '男', '女', '男', '女', '女'],

'年龄': [20, 25, 30, 35, 40, 45]

}

df = pd.DataFrame(data)

grouped = df.groupby(['姓名', '性别'])['年龄'].apply(list).reset_index()

print(grouped)

运行结果:

姓名 性别 年龄

0 张三 男 [20, 35]

1 李四 男 [25, 40]

2 王五 女 [30, 45]

本文介绍了如何使用 Pandas 对数据进行分组和展开。首先,我们使用 `groupby` 方法对数据进行分组,然后使用 `apply` 方法对每个分组进行操作。通过这种方法,我们可以按照两列进行分组,并展开第三列的数据。这对于数据分析和处理来说是一种非常有用的技巧。

参考链接:

- [Pandas 中文文档](https://www.pypandas.cn/docs/)