python数字排序分组_R与Python手牵手:数据的分组排序

原标题:R与Python手牵手:数据的分组排序

作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com

这次介绍如何在Python与R中进行表格数据的分组排序,也就是分组进行统一运算,以及按照规则进行排列。

Python#载入模块 import pandas as pd import numpy as np import matplotlib.pylab as plt #载入数据 edu = pd.read_csv('G:/Py/introduction-datascience-python-book-master/files/ch02/educ_figdp_1_Data.csv', na_values=':', usecols=['TIME', 'GEO', 'Value']) #na_values是把“:”符号认为是缺失值的意思

数据可以在以下网址取得:

https://github.com/DataScienceUB/introduction-datascience-python-book

排序#按照Value从大到小排序,ascending控制正序倒序,inplace控制是否在原数据集进行修改 edu.sort_values(by='Value', ascending=False, inplace=True) edu.head()

TIME

GEO

Value

130

2010

Denmark

8.81

131

2011

Denmark

8.75

129

2009

Denmark

8.74

121

2001

Denmark

8.44

122

2002

Denmark

8.44

#返回原始排序 edu.sort_index(axis=0, ascending=True, inplace=True) edu.head()

TIME

GEO

Value

0

2000

European Union (28 countries)

NaN

1

2001

European Union (28 countries)

NaN

2

2002

European Union (28 countries)

5.00

3

2003

European Union (28 countries)

5.03

4

2004

European Union (28 countries)

4.95

由此,我们也可以发现,无论我们怎么进行排序,原始的行号是一直得以保存的,有了这个我们就可以从新恢复数据的排序。

分组#根据GEO分组得到组内的平均值 group = edu[['GEO', 'Value']].groupby('GEO').mean() group.head()

Value

GEO

Austria

5.618333

Belgium

6.189091

Bulgaria

4.093333

Cyprus

7.023333

Czech Republic

4.168333

整合

filtered_data = edu[edu['TIME'] > 2005] pivedu = pd.pivot_table(filtered_data, values='Value', index=['GEO'], columns=['TIME']) pivedu.head()

TIME

2006

2007

2008

2009

2010

2011

GEO

Austria

5.40

5.33

5.47

5.98

5.91

5.80

Belgium

5.98

6.00

6.43

6.57

6.58

6.55

Bulgaria

4.04

3.88

4.44

4.58

4.10

3.82

Cyprus

7.02

6.95

7.45

7.98

7.92

7.87

Czech Republic

4.42

4.05

3.92

4.36

4.25

4.51

pivedu.loc[['Spain', 'Portugal'], [2006, 2011]]

TIME

2006

2011

GEO

Spain

4.26

4.82

Portugal

5.07

5.27

R

下面看看R语言中实现相同操作的步骤:

#加载包与数据读取 library(tidyverse) edu = read_csv('G:/Py/introduction-datascience-python-book-master/files/ch02/educ_figdp_1_Data.csv', na=":") %>% select(TIME,GEO,Value)-- Attaching packages --------------------------------------- tidyverse 1.2.1 -- √ ggplot2 3.0.0 √ purrr 0.2.5 √ tibble 1.4.2 √ dplyr 0.7.6 √ tidyr 0.8.1 √ stringr 1.3.1 √ readr 1.1.1 √ forcats 0.3.0 -- Conflicts ------------------------------------------ tidyverse_conflicts() -- x dplyr::filter() masks stats::filter() x dplyr::lag() masks stats::lag() Parsed with column specification: cols( TIME = col_integer(), GEO = col_character(), INDIC_ED = col_character(), Value = col_double(), `Flag and Footnotes` = col_character() )排序edu %>% arrange(desc(Value)) %>% head

TIME

GEO

Value

2010

Denmark

8.81

2011

Denmark

8.75

2009

Denmark

8.74

2001

Denmark

8.44

2002

Denmark

8.44

2004

Denmark

8.43

首先,要知道desc()加在Value前,就会变为降序排列,否则默认为升序。

这里,如果需要在原始数据中变更,赋值给本身即可,其实在原始数据中改数据是极其危险的,不推荐,应该总是用copy来操作,如果出错了随时回到原始备份再次copy。

分组edu %>% select(GEO,Value) %>% #选择指定列group_by(GEO) %>% #按照GEO分组summarize (Value = mean(Value,na.rm = T)) %>% #按照分组计算Value的均值,忽略缺失值head() #取前几行进行展示

GEO

Value

Austria

5.618333

Belgium

6.189091

Bulgaria

4.093333

Cyprus

7.023333

Czech Republic

4.168333

Denmark

8.331667

整合

#加载包与数据读取 library(tidyverse) edu = read_csv('G:/Py/introduction-datascience-python-book-master/files/ch02/educ_figdp_1_Data.csv', na=":") %>% select(TIME,GEO,Value)

GEO

2006

2007

2008

2009

2010

2011

Austria

5.40

5.33

5.47

5.98

5.91

5.80

Belgium

5.98

6.00

6.43

6.57

6.58

6.55

Bulgaria

4.04

3.88

4.44

4.58

4.10

3.82

Cyprus

7.02

6.95

7.45

7.98

7.92

7.87

Czech Republic

4.42

4.05

3.92

4.36

4.25

4.51

Denmark

7.97

7.81

7.68

8.74

8.81

8.75

分析

同样的步骤,不同的表达,大同小异。

温馨提示

后面所有的教程都会坚持用最简单的例子,这样有一点不会的同学也能够很容易通过查询进行扩展。如果个别函数不知道如何使用,请使用?来查询使用方法,如R中“?spread”。

今日

推荐

对话大数据系列技术

从破冰到精进

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值