Pandas四、Grouping(分組)和Sorting(排序)
阿新 • • 發佈:2019-01-06
讀入要測試的檔案。
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教程。