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检测远程端口是否打开的方法
Mar 14 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
浅谈python中的占位符
Nov 09 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
Python魔法方法详解
Feb 13 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
django从后台返回html代码的实例
Mar 11 Python
Django ORM filter() 的运用详解
May 14 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 Python
Python内置数据类型中的集合详解
Mar 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
星际争霸中的热键
2020/03/04 星际争霸
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
vue实现五子棋游戏
2020/05/28 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python 递归函数详解及实例
2016/12/27 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python 实现单通道转3通道
2019/12/03 Python
Python解析微信dat文件的方法
2020/11/30 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
思想政治教育专业个人求职信范文
2013/12/20 职场文书
爱国演讲稿500字
2014/05/04 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python