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的"分类汇总"。把数据按某个类别分成几组(比如按员工姓名分组),然后对每组分别计算(求和、求平均、计数等)。
三步理解:
- 分组 :按谁分?(
by='姓名') - 取列 :对哪列算?(
['交易额']) - 聚合 :怎么算?(
.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() 让你一次性对数据做多种计算,不用写多行代码。比如对交易额同时求"总和、平均、最小、中值",一行搞定。
今日核心总结
-
统计查看三件套:
describe():一键看全部统计指标quantile():看数据的分布(四分位数)idxmin()/idxmax():找最值在哪一行
-
排序:
sort_values(by='列名'):按数据大小排sort_index():按行标签或列名排- 多列排序可以指定不同的升序降序
-
分组聚合(工作核心):
- 套路:
分组 → 取列 → 计算 groupby('列名')['要算的列'].sum():分类求和groupby('列名')['要算的列'].mean():分类求平均agg(['sum', 'mean', 'min']):一次性做多种计算
- 套路:
-
分析思路:以后遇到任何数据分析问题,问自己三个问题:
- 按什么分类?(
by=) - 对哪个指标算?(选哪一列)
- 用什么方式算?(求和?平均?计数?)
- 按什么分类?(
这就是数据分析的核心流程:分组 → 聚合 → 找规律。
注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。