Pandas 数据排序计数分组合并

Week 4

数据排序

  • 按值排序

    DataFrame.sort_values(by = ['列一','列二'],axis = 0, ascending = Ture, inplace=False )

    返回一个dataframe类型

    • by 决定要依据哪一列(行)排序,

      如果是某一列 by = '列名'

      如果是很多列 by = ['列一','列二']

    • axis 决定是上下排序还是左右排序,默认为上下排序

      axis = 0 按 index 排序,上下排序

      axis = 1 按 columns 排序, 左右排序

    • ascending 决定是升序还是降序,默认是升序

      ascending = True 升序

      ascending = False 降序

    • inplace 决定是否替代原数据, 默认为否

  • 按索引排序

    DataFrame.sort_index(axis = 0, ascending = Ture)

    • axis 决定是上下排序还是左右排序,默认为上下排序

      axis = 0 按 index 排序,上下排序

      axis = 1 按 columns 排序, 左右排序

    • ascending 决定是升序还是降序,默认是升序

      ascending = True 升序

      ascending = False 降序

    import pandas as pd
    marketing = pd.read_excel('DirectMarketing.xlsx')
    marketing = marketing[['Age','Salary','AmountSpent']]
    print(marketing.sort_values(by = ['Salary']))
    print(marketing.sort_values(by = ['Salary'], ascending = False))
    

数据计数

series.nunique()

  • 返回series的唯一值的数量(出现了多少种不同的值)

    series.value_counts()

  • 返回每个唯一值对应的数据个数※

    marketing['Catalogs'].value_counts() 
    

数据分组

dataframe.groupby()可以用自然的方式将数据分成有共同点的几组,完成类似于“有几个小孩的人收入的平均数情况”等数据分析

  • 分组的依据

    列名为分组键:以某一列的值作为分组的依据

    df.groupby('列名')

    列名组成的列表为分组键:以某几列的值作为分组的依据

    df.groupby(['列名1','列名2',...])

    函数为分组键
    任何被当做分组键的函数都会在各个索引值上被调用一次,其返回值就会被用作分组名称。

    df.groupby(func)

  • 分组的结果

    groupby()函数返回的是一个 GruopBy类型对象,此时数据并没有做分离操作,直到用 GroupBy 类型对象执行某些数据操作之后才分离

  • groupBy可用的操作方法:

    内建方法(优化过)

    count 分组中非 NA 值的数量
    sum 非 NA 值的和
    mean 非 NA 值的平均值
    median 非 NA 值的算数中位数
    std, var 无偏(分母为 n-1)标准差和方差
    min, max 非 NA 值的最小值和最大值
    prod 非 NA 值的积
    first, last 第一个和最后一个非 NA 值
    size 计算组的尺寸

    例子

    import pandas as pd 
    marketing = pd.read_excel('DirectMarketing.xlsx')
    #每个年龄组的总消费额
    print(marketing.groupby('Age').sum()['AmountSpent'])
    
    • 选择一组数据

      groupby.getgroup('xxx')

      可以根据某元素内容选择出某一组数据

自定义的聚合函数,通过传入 GroupBy.aggregate()GroupBy.agg() 来实现

dataframe.groupby('列名').agg(func_name)

数据合并

dataframe1.merge(dataframe2,how='outer')

可以根据一个或多个键(key)将不同DataFrame中的行连接起来

唯一的要求是,在每个数据集中,有一相同的列。

返回的是一个 dataframe 类型的对象

  • how 参数可以选择合并的方式,
`inner`:内连接(取key的交集)

`outer`:外连接(取 key 的并集)

  • 默认以重叠的列名当做连接键

  • 默认做inner连接(取key的交集)

  • Join()

  • concat()

  • split-apply-combine

Challenge

Sorting

Reads in the excel file DirectMarketing.xlsx, and aselect only the Age, Salary and AmountSpent columns. It should then sort the rows so that they are in increasing order of Salary. Using head(), display the first 5 rows.

读取文件,选择特定的列,根据 Salary 的值升序排列,截取前五行
根据值进行升序排序用DataFrame.sort_values()

import pandas as pd
marketing = pd.read_excel('DirectMarketing.xlsx')
marketing = marketing[['Age','Salary','AmountSpent']]
marketing.sort_values(by = 'Salary',inplace = True)
print(marketing.head(5))

Group by: salary per number of children

Reads in the excel file DirectMarketing.xlsx and group the data by number of children, and print out the mean salary for each group.

读取文件,根据children的数据分组,打印每一组的salarymean

分组函数dataframe.groupby('列名')

按组求平均值Grouphy.mean()

Dataframe 的 某一列提取出series:dataframe['列名']

import pandas as pd 
marketing = pd.read_excel('DirectMarketing.xlsx')
child_groups = marketing.groupby('Children')
print(child_groups.mean()['Salary'])

Inner join: soccer and cricket

将两张表内连接,改变 dataframe 列的顺序

dataframe1.merge(dataframe2,how = 'inner')

import pandas as pd
soccer = pd.DataFrame({'People': ['Stephen', 'Alison', 'Jess'], 'SoccerTeam': ['Chelsea', 'Chelsea', 'Arsenal']})
cricket = pd.DataFrame({'People': ['Stephen', 'Tina', 'Jess', 'Will'], 'CricketTeam': ['Sixers', 'Sixers', 'Thunder', 'Thunder']})


sport = cricket.merge(soccer, how='inner')
print(sport[['People','SoccerTeam','CricketTeam']])

Outer join: soccer and cricket

将两张表外连接

dataframe1.merge(dataframe2,how = 'outer')

import pandas as pd
soccer = pd.DataFrame({'People': ['Stephen', 'Alison', 'Jess'], 'SoccerTeam': ['Chelsea', 'Chelsea', 'Arsenal']})
cricket = pd.DataFrame({'People': ['Stephen', 'Tina', 'Jess', 'Will'], 'CricketTeam': ['Sixers', 'Sixers', 'Thunder', 'Thunder']})

sport = soccer.merge(cricket, how = 'outer')
print(sport)

Mean marks

Add in an additional column to the combined dataset called mean_marks which gives the average mark for each person. Print the data in order of descending mean mark.

合并表格,计算每行的平均数,并在后面添加一列数据,最后根据平均数据倒序排序

import pandas as pd

BUSS6002 = pd.DataFrame({'People': ['Stephen', 'Tina', 'Alison', 'Jess'], 'BUSS6002_mark': [89, 63, 84, 70]})
QBUS6840 = pd.DataFrame({'People': ['Stephen', 'Cooper', 'Jess', 'Will', 'Chris'], 'QBUS6840_mark': [83, 71, 74, 68, 88]})
INFO6018 = pd.DataFrame({'People': ['Cooper', 'Jess', 'Alison', 'Chris'], 'INFO6018_mark': [68, 71, 86, 91]})


marks = BUSS6002.merge(QBUS6840,how = 'outer')
marks = marks.merge(INFO6018,how = 'outer')
marks['mean_mark'] = marks.mean(1)
print(marks.sort_values( by= 'mean_mark', ascending = False))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容