Python学习计划——7.3数据聚合与分组

数据聚合与分组是数据分析中的重要操作,用于按某些条件对数据进行分组,并对每个组进行汇总统计。pandas库提供了强大的分组和聚合功能。

1. 数据分组

数据分组(Grouping)指的是将数据根据某些条件分为不同的组。可以使用groupby()函数进行分组操作。

示例
import pandas as pd

# 创建数据帧
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
        'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Chicago'],
        'Age': [25, 30, 35, 40, 50],
        'Salary': [50000, 60000, 70000, 80000, 90000]}
df = pd.DataFrame(data)
print("原始数据帧:")
print(df)

# 按城市分组
grouped = df.groupby('City')
print("\n按城市分组的数据:")
for name, group in grouped:
    print(f"\n城市: {name}")
    print(group)
2. 数据聚合

数据聚合(Aggregation)是指对分组后的数据进行汇总统计。常见的聚合操作包括求和、平均值、计数、最大值、最小值等。可以使用agg()方法进行聚合操作。

示例
# 按城市分组并计算每个城市的平均年龄和平均薪水
aggregated = grouped.agg({'Age': 'mean', 'Salary': 'mean'})
print("\n按城市聚合的数据:")
print(aggregated)
3. 多重聚合

可以对一个列应用多个聚合函数,也可以对不同的列应用不同的聚合函数。

示例
# 对年龄应用多个聚合函数,对薪水应用单个聚合函数
multi_aggregated = grouped.agg({'Age': ['mean', 'max'], 'Salary': 'sum'})
print("\n多重聚合的数据:")
print(multi_aggregated)
4. 分组后的数据转换

分组后的数据可以使用transform()方法进行转换,生成与原数据帧大小相同的输出。常用于标准化、归一化等操作。

示例
# 创建数据帧
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
        'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Chicago'],
        'Age': [25, 30, 35, 40, 50],
        'Salary': [50000, 60000, 70000, 80000, 90000]}
df = pd.DataFrame(data)
print("\n原始数据帧:")
print(df)

# 按城市分组并计算每个城市的平均年龄和平均薪水
grouped = df.groupby('City')
aggregated = grouped.agg({'Age': 'mean', 'Salary': 'mean'})
print("\n按城市聚合的数据:")
print(aggregated)

# 对年龄应用多个聚合函数,对薪水应用单个聚合函数
multi_aggregated = grouped.agg({'Age': ['mean', 'max'], 'Salary': 'sum'})
print("\n多重聚合的数据:")
print(multi_aggregated)

# 标准化薪水(每个城市内部的标准化)
df['Standardized_Salary'] = grouped['Salary'].transform(lambda x: (x - x.mean()) / x.std())
print("\n标准化薪水后的数据帧:")
print(df)
5. 分组后的数据过滤

可以对分组后的数据进行过滤,只保留满足条件的组。可以使用filter()方法进行操作。

示例
# 过滤掉平均薪水低于75000的城市
filtered = grouped.filter(lambda x: x['Salary'].mean() > 75000)
print("\n过滤后的数据帧:")
print(filtered)
6. 可运行的Python案例

下面是一个完整的Python程序,演示了数据聚合与分组的基本操作,包括分组、聚合、多重聚合、转换和过滤。

import pandas as pd

# 创建数据帧
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
        'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Chicago'],
        'Age': [25, 30, 35, 40, 50],
        'Salary': [50000, 60000, 70000, 80000, 90000]}
df = pd.DataFrame(data)
print("原始数据帧:")
print(df)

# 按城市分组
grouped = df.groupby('City')
print("\n按城市分组的数据:")
for name, group in grouped:
    print(f"\n城市: {name}")
    print(group)

# 按城市分组并计算每个城市的平均年龄和平均薪水
aggregated = grouped.agg({'Age': 'mean', 'Salary': 'mean'})
print("\n按城市聚合的数据:")
print(aggregated)

# 对年龄应用多个聚合函数,对薪水应用单个聚合函数
multi_aggregated = grouped.agg({'Age': ['mean', 'max'], 'Salary': 'sum'})
print("\n多重聚合的数据:")
print(multi_aggregated)

# 标准化薪水(每个城市内部的标准化)
df['Standardized_Salary'] = grouped['Salary'].transform(lambda x: (x - x.mean()) / x.std())
print("\n标准化薪水后的数据帧:")
print(df)

# 过滤掉平均薪水低于75000的城市
filtered = grouped.filter(lambda x: x['Salary'].mean() > 75000)
print("\n过滤后的数据帧:")
print(filtered)

可以将上面的代码复制到你的IDE中运行,观察程序的输出。这个案例综合了数据聚合与分组的基本知识,帮助你理解和掌握这些操作。继续加油,学习Python会越来越有趣和有用!

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值