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图片裁剪实例代码(如头像裁剪)
Jun 21 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
Python requests库用法实例详解
Aug 14 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
使用python turtle画高达
Jan 19 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
如何在pycharm中安装第三方包
Oct 27 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
python实现简单文件读写函数
Feb 25 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
php图片上传类 附调用方法
2016/05/15 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python代码调试的几种方法总结
2015/04/15 Python
如何将python中的List转化成dictionary
2016/08/15 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
实体的生命周期
2013/08/31 面试题
清洁工岗位职责
2014/01/29 职场文书
总经理司机岗位职责
2014/02/06 职场文书
教师专业自荐书范文
2014/02/10 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
电影雷锋观后感
2015/06/10 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
导游词之襄阳古城
2019/09/27 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Java实现二分搜索树的示例代码
2022/03/17 Java/Android