数字排序分组"/>
python数字排序分组
原标题:R与Python手牵手:数据的分组排序
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq
这次介绍如何在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是把“:”符号认为是缺失值的意思
数据可以在以下网址取得:
排序#按照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”。
今日
推荐
对话大数据系列技术
从破冰到精进
责任编辑:
更多推荐
python数字排序分组
发布评论