1. 程式人生 > >Pandas四、Grouping(分組)和Sorting(排序)

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