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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python深入学习之内存管理
Aug 31 Python
python 远程统计文件代码分享
May 14 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
Python爬虫学习之翻译小程序
Jul 30 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
php 文本文件的读取效率
2012/02/10 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
python提示No module named images的解决方法
2014/09/29 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
python实现简易通讯录修改版
2018/03/13 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
jupyter notebook实现显示行号
2020/04/13 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
升国旗仪式主持词
2014/03/19 职场文书
知识竞赛主持词
2014/03/26 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书