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实例之wxpython中Frame使用方法
Jun 09 Python
Python实现115网盘自动下载的方法
Sep 30 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
详解Golang 与python中的字符串反转
Jul 21 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
详解python中递归函数
Apr 16 Python
python向图片里添加文字
Nov 26 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
python适合做数据挖掘吗
Jun 16 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 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
PHP的加密方式及原理
2012/06/14 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
详解 Python 与文件对象共事的实例
2017/09/11 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
python求绝对值的三种方法小结
2019/12/04 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
年会活动策划方案
2014/01/23 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
用Python实现Newton插值法
2021/04/17 Python
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python