pandas-数据统计函数,max,min,value_counts,agg,apply,map

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

数据准备

test-data.csv中的数据

订单ID,商品类别,子类别,销售地区,销售月份,单价,销量,折扣,销售额,利润
1001,电子产品,手机,华东,2024-01,5999,2,0.05,11398.1,1199.8
1002,家居用品,沙发,华北,2024-01,3999,1,0.0,3999.0,799.8
1003,电子产品,笔记本,华南,2024-01,7999,1,0.1,7199.1,1599.8
1004,服装,男装,华东,2024-01,599,3,0.2,1437.6,239.6
1005,家居用品,灯具,华北,2024-02,899,2,0.0,1798.0,359.6
1006,电子产品,平板,华南,2024-02,3499,2,0.05,6648.1,699.8
1007,服装,女装,华东,2024-02,799,4,0.1,2876.4,559.2
1008,家居用品,床垫,华北,2024-02,2999,1,0.0,2999.0,599.8
1009,电子产品,耳机,华南,2024-03,1299,5,0.15,5517.25,899.15
1010,服装,童装,华东,2024-03,399,6,0.2,1149.6,239.4
1011,家居用品,桌椅,华北,2024-03,1599,2,0.0,3198.0,639.6
1012,电子产品,手表,华南,2024-03,1999,3,0.1,5397.3,1079.7
1013,服装,男装,华东,2024-04,699,2,0.05,1328.1,209.7
1014,家居用品,窗帘,华北,2024-04,499,4,0.1,1796.4,359.2
1015,电子产品,手机,华南,2024-04,5999,1,0.0,5999.0,1199.8
1016,服装,女装,华东,2024-04,899,3,0.15,2285.85,419.55
1017,家居用品,地毯,华北,2024-05,799,2,0.0,1598.0,319.6
1018,电子产品,笔记本,华南,2024-05,8999,1,0.05,8549.05,1799.8
1019,服装,童装,华东,2024-05,499,5,0.2,1996.0,399.0
1020,家居用品,灯具,华南,2024-05,999,3,0.1,2697.3,539.1
1021,电子产品,平板,华东,2024-06,3799,2,0.0,7598.0,759.8
1022,服装,男装,华北,2024-06,799,3,0.1,2157.3,419.7
1023,家居用品,沙发,华南,2024-06,4299,1,0.05,4084.05,859.8
1024,电子产品,耳机,华东,2024-06,1499,4,0.15,5096.6,899.4
1025,服装,女装,华北,2024-07,999,2,0.0,1998.0,399.6

import pandas as pd
import numpy as np

df = pd.read_csv("./test-data.csv")

订单ID商品类别子类别销售地区销售月份单价销量折扣销售额利润
01001电子产品手机华东2024-01599920.0511398.101199.80
11002家居用品沙发华北2024-01399910.003999.00799.80
21003电子产品笔记本华南2024-01799910.107199.101599.80
31004服装男装华东2024-0159930.201437.60239.60
41005家居用品灯具华北2024-0289920.001798.00359.60
51006电子产品平板华南2024-02349920.056648.10699.80
61007服装女装华东2024-0279940.102876.40559.20
71008家居用品床垫华北2024-02299910.002999.00599.80
81009电子产品耳机华南2024-03129950.155517.25899.15
91010服装童装华东2024-0339960.201149.60239.40
101011家居用品桌椅华北2024-03159920.003198.00639.60
111012电子产品手表华南2024-03199930.105397.301079.70
121013服装男装华东2024-0469920.051328.10209.70
131014家居用品窗帘华北2024-0449940.101796.40359.20
141015电子产品手机华南2024-04599910.005999.001199.80
151016服装女装华东2024-0489930.152285.85419.55
161017家居用品地毯华北2024-0579920.001598.00319.60
171018电子产品笔记本华南2024-05899910.058549.051799.80
181019服装童装华东2024-0549950.201996.00399.00
191020家居用品灯具华南2024-0599930.102697.30539.10
201021电子产品平板华东2024-06379920.007598.00759.80
211022服装男装华北2024-0679930.102157.30419.70
221023家居用品沙发华南2024-06429910.054084.05859.80
231024电子产品耳机华东2024-06149940.155096.60899.40
241025服装女装华北2024-0799920.001998.00399.60

统计函数 sum,max,min,mean,value_counts

# 总销售额
df["销售额"].sum()
100801.1
# 最大的销售额
df["销售额"].max()
11398.1
# 最小的销售额
df["销售额"].min()
1149.6
# 平均销售额
df["销售额"].mean()
4032.0440000000003
# 统计每种商品出现的次数
df["商品类别"].value_counts()
商品类别
电子产品    9
家居用品    8
服装      8
Name: count, dtype: int64
# 商品类别中 出现次数最多的商品,也就是中位数
df["商品类别"].mode()
0    电子产品
Name: 商品类别, dtype: object
# 销售额列 的总数和利润列的总数
df[["销售额","利润"]].sum()
销售额    100801.1
利润      17499.3
dtype: float64

分组groupby

# 按“商品类别”分组,对“销量”求和
category_sales = df.groupby('商品类别')['销量'].sum()
category_sales
商品类别
家居用品    16
服装      28
电子产品    21
Name: 销量, dtype: int64
# 按“商品类别”分组,对“销售额”求和
df.groupby('商品类别')['销售额'].sum()
商品类别
家居用品    22169.75
服装      15228.85
电子产品    63402.50
Name: 销售额, dtype: float64
# 多个分组字段用列表传入
df.groupby(['商品类别', '销售地区'])['利润'].sum()
商品类别  销售地区
家居用品  华北      3077.60
      华南      1398.90
服装    华东      2066.45
      华北       819.30
电子产品  华东      2859.00
      华南      7278.05
Name: 利润, dtype: float64
# numeric_only=True 只处理数值列
df.groupby('销售月份').mean(numeric_only=True)
订单ID单价销量折扣销售额利润
销售月份
2024-011002.54649.01.750.08756008.4500959.7500
2024-021006.52049.02.250.03753580.3750554.6000
2024-031010.51324.04.000.11253815.5375714.4625
2024-041014.52024.02.500.07502852.3375547.0625
2024-051018.52824.02.750.08753710.0875764.3750
2024-061022.52599.02.500.07504733.9875734.6750
2024-071025.0999.02.000.00001998.0000399.6000
# 也 可以先挑选出列 再进行统计
df[["订单ID",	"单价",	"销量","折扣","销售额","利润",'销售月份']].groupby('销售月份').mean()
订单ID单价销量折扣销售额利润
销售月份
2024-011002.54649.01.750.08756008.4500959.7500
2024-021006.52049.02.250.03753580.3750554.6000
2024-031010.51324.04.000.11253815.5375714.4625
2024-041014.52024.02.500.07502852.3375547.0625
2024-051018.52824.02.750.08753710.0875764.3750
2024-061022.52599.02.500.07504733.9875734.6750
2024-071025.0999.02.000.00001998.0000399.6000

高级操作

map():用于Series(单列),对每个元素执行函数(映射转换)。

apply():可用于Series(逐元素) 或DataFrame(逐行 / 列),执行更复杂的自定义逻辑。

agg():用于分组后的数据,对分组结果执行聚合操作(如求和、均值等)。

map

map():处理单列(Series)的元素级映射

作用:对 Series 中的每个元素应用函数或字典映射,返回新的 Series(长度不变)。

适用场景:值替换、简单转换(如分类值编码、单位转换)。

category_map = {
    '电子产品': '电子',
    '家居用品': '家居',
    '服装': '服饰'
}

# 用 map() 替换  df['类别简称'] = df['商品类别'].map(category_map)
df['类别简称'] = df['商品类别'].map( { '电子产品': '电子','家居用品': '家居','服装': '服饰'} )
df[['商品类别', '类别简称']].head(3)
商品类别类别简称
0电子产品电子
1家居用品家居
2电子产品电子
# 定义转换函数
def price_level(price):
    return '高价' if price > 5000 else '低价'

# 用 map() 应用函数
df['价格等级'] = df['单价'].map(price_level)
df[['价格等级', '单价']].head(3)
价格等级单价
0高价5999
1低价3999
2高价7999

apply

apply():处理复杂逻辑(支持 Series/DataFrame)

作用:

对 Series:类似 map(),但可处理更复杂的逻辑(如多条件判断)。

对 DataFrame:按行(axis=1)或列(axis=0)应用函数,处理跨列 / 跨行数据。

# 定义复杂逻辑函数
def profit_rating(profit):
    if profit > 1000:
        return '高利润'
    elif profit > 500:
        return '中利润'
    else:
        return '低利润'

# 用 apply() 应用到 Series
df['利润评级'] = df['利润'].apply(profit_rating)

df[['利润', '利润评级']].head(5)
利润利润评级
01199.8高利润
1799.8中利润
21599.8高利润
3239.6低利润
4359.6低利润
# 定义跨列计算函数(row 代表一行数据,通过 row['列名'] 访问值)
def profit_rate(row):
    return row['利润'] / row['销售额']  # 利润率 = 利润 / 销售额

# 按行应用(axis=1 表示行)
df['利润率'] = df.apply(profit_rate, axis=1)
df[['利润', '销售额', '利润率']].head(3)
利润销售额利润率
01199.811398.10.105263
1799.83999.00.200000
21599.87199.10.222222

agg

agg():分组后的聚合操作

作用:对 groupby() 分组后的结果应用聚合函数(如求和、均值),返回聚合后的统计量(长度通常缩短)。

适用场景:分组统计(如按类别求总销量、平均利润)。

# 挑选出
df.groupby('商品类别')['利润'].agg(['sum', 'mean', 'max'])
summeanmax
商品类别
家居用品4476.50559.562500859.8
服装2885.75360.718750559.2
电子产品10137.051126.3388891799.8
# 按 商品类别 分组,对 销量 求总和,对 利润 求总和与均值。
df.groupby('商品类别').agg(
    总销量=('销量', 'sum'),
    总利润=('利润', 'sum'),
    平均利润=('利润', 'mean')
)
总销量总利润平均利润
商品类别
家居用品164476.50559.562500
服装282885.75360.718750
电子产品2110137.051126.338889
df.groupby(['商品类别', '销售地区']).agg(
    总销售额=('销售额', 'sum'),
    最大销量=('销量', 'max')
)
总销售额最大销量
商品类别销售地区
家居用品华北15388.404
华南6781.353
服装华东11073.556
华北4155.303
电子产品华东24092.704
华南39309.805

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值