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

读入要测试的文件。

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

查看部分数据:

Pandas四、Grouping(分组)和Sorting(排序)_第1张图片

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 

                                                                       Pandas四、Grouping(分组)和Sorting(排序)_第2张图片

先看看 分组是什么情况:

Pandas四、Grouping(分组)和Sorting(排序)_第3张图片

再看看 agg函数是咋回事?

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

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

                                                      Pandas四、Grouping(分组)和Sorting(排序)_第4张图片 

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

应用:最贵酒的种类?

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

                                                    Pandas四、Grouping(分组)和Sorting(排序)_第5张图片

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
'''

                                                   Pandas四、Grouping(分组)和Sorting(排序)_第6张图片

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

先看看分组情况:

Pandas四、Grouping(分组)和Sorting(排序)_第7张图片

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

 

 

 

 

你可能感兴趣的:(pandas,python操作数据,python,kaggle,pandas,python)