Pandas中DataFrame的分组/分割/合并的实现


Posted in Python onJuly 16, 2019

学习《Python3爬虫、数据清洗与可视化实战》时自己的一些实践。

DataFrame分组操作

注意分组后得到的就是Series对象了,而不再是DataFrame对象。

import pandas as pd

# 还是读取这份文件
df = pd.read_csv("E:/Data/practice/taobao_data.csv", delimiter=',', encoding='utf-8', header=0)

# 计算'成交量'按'位置'分组的平均值
grouped1 = df['成交量'].groupby(df['位置']).mean()
# print(grouped1)

Pandas中DataFrame的分组/分割/合并的实现

# 计算'成交量'先按'位置'再按'卖家'分组后的平均值
grouped2 = df['成交量'].groupby([df['位置'], df['卖家']]).mean()
# print(grouped2)

Pandas中DataFrame的分组/分割/合并的实现

# 计算先按'位置'再按'卖家'分组后的所有指标(如果可以计算平均值)的平均值
grouped3 = df.groupby([df['位置'], df['卖家']]).mean()
# print(grouped3)

Pandas中DataFrame的分组/分割/合并的实现

DataFrame数据分割和合并

这里其实可以操作得很复杂,这里是一些比较基本的用法。

import pandas as pd

# 还是读取这份文件
df = pd.read_csv("E:/Data/practice/taobao_data.csv", delimiter=',', encoding='utf-8', header=0)
# 计算销售额
df['销售额'] = df['价格'] * df['成交量']

# (1)前面学了ix,loc,iloc,这里是直接用[]运算做分割
df1 = df[30:40][['位置', '卖家']]
# print(df1) # 从30号行到39号行
df2 = df[80:90][['卖家', '销售额']]

Pandas中DataFrame的分组/分割/合并的实现

# (2)内联接操作(相当于JOIN,INNER JOIN)
df3 = pd.merge(df1, df2) # 不指定列名,默认选择列名相同的'卖家'列
# print(df3)
df4 = pd.merge(df1, df2, on='卖家') # 指定按照'卖家'相同做联接
# print(df4)

Pandas中DataFrame的分组/分割/合并的实现

# (3)全外联接操作(相当于FULL JOIN),没有值的补NaN
df5 = pd.merge(df1, df2, how='outer')
# print(df5)

Pandas中DataFrame的分组/分割/合并的实现

# (4)左外联接操作(相当于LEFT JOIN),即左边的都要,'销售额'没有就NaN
df6 = pd.merge(df1, df2, how='left')
# print(df6)

Pandas中DataFrame的分组/分割/合并的实现

# (5)右外联接操作(相当于RIGHT JOIN),即右边的都要,'位置'没有就NaN
df7 = pd.merge(df1, df2, how='right')
# print(df7)

Pandas中DataFrame的分组/分割/合并的实现

# (6)按索引相同做联接
df_a = df[:10][['位置', '卖家']]
df_b = df[3:13][['价格', '成交量']]
df_c_1 = pd.merge(df_a, df_b, left_index=True, right_index=True) # 内联接
# print(df_c_1) # 只有从3到9的

Pandas中DataFrame的分组/分割/合并的实现

df_c_2 = df_a.join(df_b) # 左外联接
# print(df_c_2) # 从0到10

Pandas中DataFrame的分组/分割/合并的实现

df_c_3 = df_b.join(df_a) # "右"外联接(其实还是左外联接,就是b在左边a在右边)
# print(df_c_3) # 从3到12

Pandas中DataFrame的分组/分割/合并的实现

# (7)轴向堆叠操作(上下堆叠时就相当于UNION ALL,默认不去重)
df8 = df[2:5][['价格']] # 注意这里只取一个列也要用[[]]
df9 = df[3:8][['销售额', '宝贝']]
df10 = df[6:11][['卖家', '位置']]
# (7.1)默认axis=0即上下堆叠,上下堆叠时,堆叠顺序和传进concat的顺序一致,最终列=所有列数去重,缺失的补NaN
# 关于axis=0需要设置sort属性的问题,还没查到有讲这个的,这个问题先留着...
df11 = pd.concat([df10, df9, df8], sort=False)
# print(df11)

Pandas中DataFrame的分组/分割/合并的实现

# (7.2)设置axis=1即左右堆叠,左右堆叠不允许索引重复,相同索引的将被合并到一行
# 左右堆叠中,堆叠顺序仅仅影响列的出现顺序
# 这很好理解,毕竟不是从上到下"摞"在一起的,而是从左到右"卡"在一起的
df12 = pd.concat([df10, df9, df8], axis=1)
df13 = pd.concat([df8, df9, df10], axis=1)
# print(df12)
# print(df13)

Pandas中DataFrame的分组/分割/合并的实现

Pandas中DataFrame的分组/分割/合并的实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python二分查找算法的递归实现方法
May 12 Python
python导入时小括号大作用
Jan 10 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
分析python切片原理和方法
Dec 19 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
如何基于线程池提升request模块效率
Apr 18 Python
python实现学生成绩测评系统
Jun 22 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
Python实现我的世界小游戏源代码
Mar 02 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 #Python
python调用其他文件函数或类的示例
Jul 16 #Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 #Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 #Python
python查找重复图片并删除(图片去重)
Jul 16 #Python
python3的print()函数的用法图文讲解
Jul 16 #Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 #Python
You might like
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
PHP7 弃用功能
2021/03/09 PHP
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
Python关于反射的实例代码分享
2020/02/20 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
广州品高软件.net笔面试题目
2012/04/18 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
高中生家长会演讲稿
2014/01/14 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP