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选择排序算法实例总结
Jul 01 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
详解python单例模式与metaclass
Jan 15 Python
python Django批量导入不重复数据
Mar 25 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
详解Scrapy Redis入门实战
Nov 18 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
能让Python提速超40倍的神器Cython详解
Jun 24 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用户指南-cookies部分
2006/10/09 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
Highcharts入门之简介
2016/08/02 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
Python list操作用法总结
2015/11/10 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
python挖矿算力测试程序详解
2019/07/03 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
Python之变量类型和if判断方式
2020/05/05 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
2014年计算机专业个人自我评价
2014/01/19 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
体现团队精神的口号
2014/06/06 职场文书
公司年底活动方案
2014/08/17 职场文书
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL