Pandas四、Grouping(分组)和Sorting(排序)

读入要测试的文件。

import pandas as pd
reviews = pd.read_csv("winemag-data-130k-v2.csv", index_col=0)
reviews.head()

查看部分数据:

1、找出数据集中最常见的。统计每个分组中指定列的数量。

创建一个序列(Series),他的索引是数据集中的“taster_twitter_handle”,值则是每个人写下的评论数。

reviews_written = reviews.groupby('taster_twitter_handle').size()
# or
reviews_written = reviews.groupby('taster_twitter_handle').taster_twitter_handle.count()
'''
按taster_twitter_handle列进行分组,统计每个分组的大小
第二种是 统计分组中 taster_twitter_handle的数目其实是一样的 因为分组就是按照taster_twitter_handle分的
'''

 

2、创建一个序列(Series),它的索引是酒的价格(price),值则是评分(points)的最大值。要求通过价格(price)升序排序。

用于:我有一定数目的钱,那我能买的最好的酒是啥呢?

best_rating_per_price = reviews.groupby('price')['points'].max().sort_index()
# best_rating_per_price = reviews.groupby('price').points.max().sort_index()
# 上面两个是等价的
best_rating_per_price 
'''
price
4.0        86
5.0        87
6.0        88
7.0        91
8.0        91
9.0        91
10.0       91
11.0       92
12.0       93
13.0       94
14.0       94
15.0       93
16.0       94
17.0       93
18.0       94
19.0       94
20.0       96
21.0       94
22.0       95
23.0       94
24.0       95
25.0       95
26.0       95
27.0       96
28.0       96
29.0       96
30.0       96
31.0       95
32.0       96
33.0       94
         ... 
698.0      97
710.0      95
750.0      92
757.0      98
764.0      94
767.0      96
770.0      96
775.0      98
780.0      91
790.0      87
800.0      99
820.0      96
848.0     100
850.0      99
886.0      97
900.0      94
932.0      97
973.0      95
980.0      94
1000.0     97
1100.0     97
1125.0     94
1200.0     96
1300.0     96
1500.0    100
1900.0     98
2000.0     97
2013.0     91
2500.0     96
3300.0     88
Name: points, Length: 390, dtype: int64
'''

3、创建一个DataFrame,它的索引是variety,值则是酒价格的最大值和最小值。

求每一个种类的最大和最小的酒的价格。

price_extremes = reviews.groupby("variety").price.agg(['min','max'])
price_extremes 

                                                                       

先看看 分组是什么情况:

再看看 agg函数是咋回事?

agg 方法将一个函数使用在一个数列上,然后返回一个标量的值。也就是说agg每次传入的是一列数据,对其聚合后返回标量。 
上面我们是对对一列使用两个函数(min,max)。

我们也可以对不同的列应用不同的聚合函数。

                                                       

4、创建一个变量,sorted_varieties,对上一个问题的变量price_extremes根据其最小价格,然后根据最大价格值进行降序排序。

应用:最贵酒的种类?

sorted_varieties = price_extremes.sort_values(by=['min', 'max'], ascending=False)
sorted_varieties

                                                    

5、创建一个序列(Series),它的索引是评价者,值则是评价者给出的评分,提示:你可能需要taster_name和points列。

reviewer_mean_ratings = reviews.groupby('taster_name').points.mean()
reviewer_mean_ratings 
'''
taster_name
Alexander Peartree    85.855422
Anna Lee C. Iijima    88.415629
Anne Krebiehl MW      90.562551
Carrie Dykes          86.395683
Christina Pickard     87.833333
Fiona Adams           86.888889
Jeff Jenssen          88.319756
Jim Gordon            88.626287
Joe Czerwinski        88.536235
Kerin O’Keefe         88.867947
Lauren Buzzeo         87.739510
Matt Kettmann         90.008686
Michael Schachner     86.907493
Mike DeSimone         89.101167
Paul Gregutt          89.082564
Roger Voss            88.708003
Sean P. Sullivan      88.755739
Susan Kostrzewa       86.609217
Virginie Boone        89.213379
Name: points, dtype: float64
'''

                                                   

6、创建一个Series序列,他们的索引是国家(country)和种类(variety)组成的复合索引队,然后根据酒数量进行降序排序。

先看看分组情况:

country_variety_counts = reviews.groupby(['country','variety']).size().sort_values(ascending=False)
country_variety_counts 
'''
country     variety                   
US          Pinot Noir                    9885
            Cabernet Sauvignon            7315
            Chardonnay                    6801
France      Bordeaux-style Red Blend      4725
Italy       Red Blend                     3624
US          Syrah                         3244
            Red Blend                     2972
France      Chardonnay                    2808
Italy       Nebbiolo                      2736
US          Zinfandel                     2711
Portugal    Portuguese Red                2466
US          Merlot                        2311
Italy       Sangiovese                    2265
US          Sauvignon Blanc               2163
France      Pinot Noir                    1966
            Rosé                          1923
US          Bordeaux-style Red Blend      1824
Germany     Riesling                      1790
US          Riesling                      1753
Argentina   Malbec                        1510
Spain       Tempranillo                   1429
France      Champagne Blend               1243
Austria     Grüner Veltliner              1234
            ...
'''

注明:

  以上数据来自kaggle learn中的pandas教程。

pandas learn

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值