数据分析第三篇——Pandas之数据的分割与聚合

3.10 高级处理-分割与聚合

3.10.1 什么是分组与聚合

在这里插入图片描述

3.10.2 分组与聚合的API

  • DataFrame.groupby(by=分组依据的列标签, as_index=False)[聚合依据的DataFrame列标签]
    • key:分组列的数据,可以有多个
  • 案例:不同颜色不同笔的价格数据
  • Series的方法:
    • 聚合依据的DataFrame列.groupby(分组依据的DataFrame列标签)
col = pd.DataFrame({'color':['white', 'red', 'green', 'red', 'green'],
                   'object':['pen', 'pencil', 'pencil', 'ashtray', 'pen'],
                   'price1':[5.56, 4.20, 1.30, 0.56, 2.75],
                   'price2':[4.75, 4.12, 1.60, 0.75, 3.15]})
col
colorobjectprice1price2
0whitepen5.564.75
1redpencil4.204.12
2greenpencil1.301.60
3redashtray0.560.75
4greenpen2.753.15
# 进行分组,对颜色分组,price1聚合
# 用DataFrame的方法分组
col.groupby(by='color')
col.groupby(by='color')['price1'].max()
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001FD07361A48>


color
green    2.75
red      4.20
white    5.56
Name: price1, dtype: float64
# 用Series的方法进行分组
col['price1'].groupby(col['color']).max()
color
green    2.75
red      4.20
white    5.56
Name: price1, dtype: float64

3.10.3 星巴克零售店铺数据案例

starbucks = pd.read_csv(r'./data/directory.csv')
starbucks.head()
BrandStore NumberStore NameOwnership TypeStreet AddressCityState/ProvinceCountryPostcodePhone NumberTimezoneLongitudeLatitude
0Starbucks47370-257954Meritxell, 96LicensedAv. Meritxell, 96Andorra la Vella7ADAD500376818720GMT+1:00 Europe/Andorra1.5342.51
1Starbucks22331-212325Ajman Drive ThruLicensed1 Street 69, Al JarfAjmanAJAENaNNaNGMT+04:00 Asia/Dubai55.4725.42
2Starbucks47089-256771Dana MallLicensedSheikh Khalifa Bin Zayed St.AjmanAJAENaNNaNGMT+04:00 Asia/Dubai55.4725.39
3Starbucks22126-218024Twofour 54LicensedAl Salam StreetAbu DhabiAZAENaNNaNGMT+04:00 Asia/Dubai54.3824.48
4Starbucks17127-178586Al Ain TowerLicensedKhaldiya Area, Abu Dhabi IslandAbu DhabiAZAENaNNaNGMT+04:00 Asia/Dubai54.5424.51

# 按国家分组,求出每个国家的星巴克零售店数量

starbucks.groupby(by='Country').count()['Brand']
Country
AD        1
AE      144
AR      108
AT       18
AU       22
      ...  
TT        3
TW      394
US    13608
VN       25
ZA        3
Name: Brand, Length: 73, dtype: int64
starbucks.groupby(by='Country').count()['Brand'].sort_values(ascending=False)[:10].plot(kind='bar', figsize=(20, 8), fontsize=20)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suLhZlvH-1586742607447)(output_261_1.png)]

按照国家和省市分组

starbucks.groupby(by=['Country', 'State/Province'])
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001FD0D190188>
starbucks.groupby(by=['Country', 'State/Province']).count()
BrandStore NumberStore NameOwnership TypeStreet AddressCityPostcodePhone NumberTimezoneLongitudeLatitude
CountryState/Province
AD711111111111
AEAJ22222200222
AZ484848484848720484848
DU8282828282821650828282
FU22222210222
.......................................
USWV2525252525252523252525
WY2323232323232322232323
VNHN66666666666
SG1919191919191917191919
ZAGT33333332333

545 rows × 11 columns

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值