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操作MySQL数据库具体方法
Oct 28 Python
python list语法学习(带例子)
Nov 01 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
python中字符串的操作方法大全
Jun 03 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
python3 property装饰器实现原理与用法示例
May 15 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 Python
Python实现随机生成迷宫并自动寻路
Jun 13 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错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Python列表如何更新值
2020/05/27 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
python interpolate插值实例
2020/07/06 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
怎样创建、运行java程序
2014/08/01 面试题
争先创优活动总结
2014/08/27 职场文书
预备党员自我评价范文
2015/03/04 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
Java中的随机数Random
2022/03/17 Java/Android
Nginx配置根据url参数重定向
2022/04/11 Servers