读入要测试的文件。
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教程。