Day 16 [Python ML、Pandas] 组成群组合排序

import pandas as pd
reviews = pd.read_csv("./winemag-data-130k-v2.csv", index_col=0)
pd.set_option("display.max_rows", 5)

Groupwise analysis

我们可以将同样类型的东西group起来,并且计算出数量

reviews.groupby('points').points.count()
points
80     397
81     692
      ... 
99      33
100     19
Name: points, Length: 21, dtype: int64

我们可以使用summary function来处理资料,例如说可以取得group後的min

reviews.groupby('points').price.min()
points
80      5.0
81      5.0
       ... 
99     44.0
100    80.0
Name: price, Length: 21, dtype: float64

可以用apply来处理groupby後的资料

reviews.groupby('winery').apply(lambda df: df.title.iloc[0])
winery
1+1=3                          1+1=3 NV Rosé Sparkling (Cava)
10 Knots                 10 Knots 2010 Viognier (Paso Robles)
                                  ...                        
àMaurice    àMaurice 2013 Fred Estate Syrah (Walla Walla V...
Štoka                         Štoka 2009 Izbrani Teran (Kras)
Length: 16757, dtype: object

可以利用lambda来取出group中,point最大的值

reviews.groupby(['country', 'province']).apply(lambda df: df.loc[df.points.idxmax()])
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

另外一个可以值得一提的function是agg()

可以利用这个函式取得summary的function

reviews.groupby(['country']).price.agg([len, min, max])
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

有效的利用groupby可以对资料做很多有力的处理

Multi-indexes

一般来说看到的都是single-label index

但是由於groupby可以group多个feature,因此会产生multi-indexs

countries_reviewed = reviews.groupby(['country', 'province']).description.agg([len])
countries_reviewed
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
mi = countries_reviewed.index
type(mi)
pandas.core.indexes.multi.MultiIndex

可以利用reset_index()方法将MultiIndex转为SingleIndex

countries_reviewed.reset_index()
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

Sorting

reset index完了之後,可以用sort_values根据len这个column做排序

countries_reviewed = countries_reviewed.reset_index()
countries_reviewed.sort_values(by='len')
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

sort_values也能倒转排序,将参数ascending设为False

countries_reviewed.sort_values(by='len', ascending=False)
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

若要根据index做排序,可以使用sort_index()函式

countries_reviewed.sort_index()
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

sort也可以一次排序多个column

countries_reviewed.sort_values(by=['country', 'len'])
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

<<:  Day 29 利用transformer自己实作一个翻译程序(十一) Decoder layer

>>:  [Day28]Laravel Eloquent ORM

Day 0x9 - 插播 - 建立 Sinopac Controller

0x1 前言 是的,要继续写 Webhook 时却发现,Day 0x4 ~ 0x6 写的函数的都没有...

谈谈 Spring boot Controller API 怎麽设计

说到了 controller 就不得不说一下 API,简单来说就是负责建立客户所需的内容和产生所需回...

IT铁人第30天 Elasticsearch 使用python查询资料 Aggregations:Scripted Metric

今天要介绍的是我另外一个也经常用的聚合方式,是Metrics底下的Scripted Metric 今...

【Day5】 Introduction

基本语法 就让我们从大家学程序语言第一个程序码「Hello world!」开始讲起吧! #inclu...