Python学习笔记·第23天:Pandas进阶——数据统计、排序与分组聚合实战

2026年6月27日 Python学习笔记(Pandas进阶:数据统计、排序与分组聚合)

一、查看数据特征和统计信息

1.1 describe():一键看所有统计指标
python 复制代码
print(df['交易额'].describe())

大白话:这个函数能一次性告诉你:总共多少条数据、平均值是多少、最小值最大值、中间值等等。相当于Excel里选中一列,然后看状态栏那一排统计信息。

1.2 其他常用统计函数
python 复制代码
df['交易额'].quantile([0, 0.25, 0.5, 0.75, 1.0])  # 四分位数
df['交易额'].median()        # 中值
df['交易额'].max()           # 最大值
df['交易额'].min()           # 最小值
df['日期'].max()             # 最后一个日期
df['工号'].min()             # 最小的工号
1.3 找出最大/最小值所在的行
python 复制代码
# 最小交易额所在的行下标
index = df['交易额'].idxmin()
print(df.loc[index, '交易额'])

# 最大交易额所在的行下标
index = df['交易额'].idxmax()
print(df.loc[index, '交易额'])

大白话idxmin()idxmax() 回答的问题是:"最小值/最大值在哪一行?"返回的是一个行下标,然后用 .loc 取出那一行的数据。

1.4 取出最大/最小的几条记录
python 复制代码
df.nsmallest(3, '交易额')    # 交易额最小的3条
df.nlargest(5, '交易额')     # 交易额最大的5条

大白话:类似Excel的"排序后取前N条",一行代码搞定,不用先排序再切片。

二、数据的排序

2.1 按值排序 sort_values()
python 复制代码
# 单列排序:按交易额降序
df.sort_values(by='交易额', ascending=False)

# 多列排序:先按交易额降序,如果相等再按工号升序
df.sort_values(by=['交易额', '工号'], ascending=[False, True])

# 把缺失值放在最后
df.sort_values(by='工号', na_position='last')

核心参数

参数 含义 大白话
by 按哪个列排 "按什么排"
ascending True升序/False降序 "从小到大还是从大到小"
ascending=[False, True] 多列可以指定不同顺序 "第一列从大到小,第二列从小到大"
na_position 缺失值放哪 "空值排最后还是最前"
2.2 按索引排序 sort_index()
python 复制代码
# 按列名升序排序
df.sort_index(axis=1, ascending=True)

大白话 :不按数据大小排,而是按行标签或列名字排。axis=0 按行索引排,axis=1 按列名排。

三、分组与聚合(核心!)

3.1 什么是分组聚合?

大白话:就是Excel的"分类汇总"。把数据按某个类别分成几组(比如按员工姓名分组),然后对每组分别计算(求和、求平均、计数等)。

三步理解

  1. 分组 :按谁分?(by='姓名'
  2. 取列 :对哪列算?(['交易额']
  3. 聚合 :怎么算?(.sum() .mean() .count()
3.2 基础分组聚合
python 复制代码
# 不同时段的销售总额
df.groupby(by='时段')['交易额'].sum()

# 各柜台的销售总额
df.groupby(by='柜台')['交易额'].sum()

# 每个员工交易额平均值
df.groupby(by='姓名')['交易额'].mean().round(2).sort_values()

# 每个员工上班的次数
df.groupby(by='姓名')['日期'].count()
3.3 按多个维度分组
python 复制代码
# 每个员工在不同时段的交易额
df.groupby(by=['姓名', '时段'])['交易额'].sum()

大白话:同时按"姓名"和"时段"分组,结果是"张三上午卖了多少、张三下午卖了多少、李四上午卖了多少......"。

3.4 更灵活的分组方式
python 复制代码
# 根据lambda表达式对索引处理后再分组
df.groupby(by=lambda num: num % 5)['交易额'].sum()
# 索引除以5余数相同的分到一组

# 根据字典指定分组
df.groupby(by={7: '下标为7的行', 35: '下标为35的行'})['交易额'].sum()
3.5 agg():同时对一列做多种计算
python 复制代码
# 对交易额同时求和、求平均、求最小、求中值
df.agg({'交易额': ['sum', 'mean', 'min', 'median'],
        '日期': ['min', 'max']})

# 对分组结果进行多种聚合
df.groupby(by='姓名').agg(['max', 'min', 'median'])

大白话agg() 让你一次性对数据做多种计算,不用写多行代码。比如对交易额同时求"总和、平均、最小、中值",一行搞定。

今日核心总结

  1. 统计查看三件套

    • describe():一键看全部统计指标
    • quantile():看数据的分布(四分位数)
    • idxmin()/idxmax():找最值在哪一行
  2. 排序

    • sort_values(by='列名'):按数据大小排
    • sort_index():按行标签或列名排
    • 多列排序可以指定不同的升序降序
  3. 分组聚合(工作核心)

    • 套路:分组 → 取列 → 计算
    • groupby('列名')['要算的列'].sum():分类求和
    • groupby('列名')['要算的列'].mean():分类求平均
    • agg(['sum', 'mean', 'min']):一次性做多种计算
  4. 分析思路:以后遇到任何数据分析问题,问自己三个问题:

    • 按什么分类?(by=
    • 对哪个指标算?(选哪一列)
    • 用什么方式算?(求和?平均?计数?)

这就是数据分析的核心流程:分组 → 聚合 → 找规律

注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。