Python Pandas:Groupby直接输出结果,简单易懂 – wiki基地

Python Pandas:Groupby 直接输出结果,简单易懂

Pandas 的 groupby() 方法是数据分析中一个极其强大的工具,它允许你根据一个或多个列的值对 DataFrame 进行分组,然后对每个组应用聚合函数、转换或过滤操作。然而,groupby() 的输出结果并非直接可见,需要进一步的操作才能得到想要的信息。本文将深入探讨如何直接、清晰地获取 groupby() 的结果,并结合多种场景和示例,帮助你轻松掌握这一技巧。

1. 理解 GroupBy 对象

调用 groupby() 方法后,返回的是一个 DataFrameGroupBy 对象,而非一个新的 DataFrame。这个对象包含了分组信息,但并没有进行实际的计算。它就像一个等待执行的蓝图,需要进一步的操作才能生成结果。

2. 直接获取聚合结果

最常见的 groupby() 用法是结合聚合函数,例如 sum()mean()count()max()min() 等。可以直接在 groupby() 后链式调用这些函数,得到一个新的 DataFrame,其中包含了每个组的聚合结果。

“`python
import pandas as pd

创建示例 DataFrame

data = {‘Category’: [‘A’, ‘A’, ‘B’, ‘B’, ‘C’, ‘C’],
‘Value’: [10, 20, 15, 25, 30, 40]}
df = pd.DataFrame(data)

按 ‘Category’ 分组并计算 ‘Value’ 的总和

result = df.groupby(‘Category’)[‘Value’].sum()

print(result)
“`

输出结果:

Category
A 30
B 40
C 70
Name: Value, dtype: int64

在这个例子中,groupby('Category')['Value'] 选择了 ‘Category’ 列作为分组依据,并指定 ‘Value’ 列作为操作对象。sum() 函数则计算了每个组 ‘Value’ 的总和。结果是一个 Series,索引为分组的类别,值为对应的总和。

3. 使用多个聚合函数

你可以同时使用多个聚合函数,只需将它们放在一个列表或字典中即可。

“`python
result = df.groupby(‘Category’)[‘Value’].agg([‘sum’, ‘mean’, ‘count’])

print(result)
“`

输出结果:

sum mean count
Category
A 30 15.0 2
B 40 20.0 2
C 70 35.0 2

使用字典可以自定义列名:

“`python
result = df.groupby(‘Category’)[‘Value’].agg({‘Total’: ‘sum’, ‘Average’: ‘mean’, ‘Count’: ‘count’})

print(result)
“`

输出结果:

Total Average Count
Category
A 30 15.0 2
B 40 20.0 2
C 70 35.0 2

4. 分组后应用自定义函数

除了内置的聚合函数,你还可以使用 apply() 方法应用自定义函数到每个组。

“`python
def custom_agg(x):
return x.max() – x.min()

result = df.groupby(‘Category’)[‘Value’].apply(custom_agg)

print(result)
“`

输出结果:

Category
A 10
B 10
C 10
Name: Value, dtype: int64

5. 处理多列分组

groupby() 可以接受一个列名列表或一个字典作为参数,实现多列分组。

“`python
data = {‘Category’: [‘A’, ‘A’, ‘B’, ‘B’, ‘A’, ‘A’],
‘Subcategory’: [‘X’, ‘Y’, ‘X’, ‘Y’, ‘X’, ‘Y’],
‘Value’: [10, 20, 15, 25, 30, 40]}
df = pd.DataFrame(data)

result = df.groupby([‘Category’, ‘Subcategory’])[‘Value’].sum()

print(result)
“`

输出结果:

Category Subcategory
A X 40
Y 60
B X 15
Y 25
Name: Value, dtype: int64

6. 重置索引

groupby() 的结果通常带有 MultiIndex(多级索引)。可以使用 reset_index() 方法将其转换为普通的 DataFrame。

“`python
result = df.groupby([‘Category’, ‘Subcategory’])[‘Value’].sum().reset_index()

print(result)
“`

输出结果:

Category Subcategory Value
0 A X 40
1 A Y 60
2 B X 15
3 B Y 25

7. 迭代 GroupBy 对象

虽然不推荐在大型数据集上使用,但你可以迭代 DataFrameGroupBy 对象,访问每个组的数据。

python
for name, group in df.groupby('Category'):
print(f"Group: {name}")
print(group)

8. 转换为字典

可以使用 to_dict() 方法将 groupby() 的结果转换为字典。

“`python
result = df.groupby(‘Category’)[‘Value’].sum().to_dict()

print(result)
“`

输出结果:

{'A': 30, 'B': 40, 'C': 70}

9. 处理缺失值

groupby() 默认会忽略缺失值。可以使用 dropna=False 参数保留包含缺失值的组。

10. 性能优化

对于大型数据集,groupby() 操作可能会比较耗时。可以考虑使用一些优化技巧,例如:

  • 使用Categorical数据类型
  • 使用 numbacython 加速

通过以上详细的讲解和示例,相信你已经对 Pandas groupby() 的输出结果有了更清晰的理解,并能够灵活运用各种技巧来直接获取想要的信息。记住,groupby() 本身只是创建了一个分组对象,需要结合聚合函数、apply() 方法或其他操作才能得到最终结果。 熟练掌握 groupby() 将极大地提升你的数据分析效率。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部