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实现合并同一个文件夹下所有txt文件的方法示例
Apr 26 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
Python如何访问字符串中的值
Feb 09 Python
python如何将两张图片生成为全景图片
Mar 05 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
Python 如何操作 SQLite 数据库
Aug 17 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 Http_Template_IT类库进行模板替换
2009/03/19 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
JS常用知识点整理
2017/01/21 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
python读取oracle函数返回值
2016/07/18 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
夜大毕业生自我评价分享
2013/11/10 职场文书
保护环境的建议书
2014/03/12 职场文书
初三新学期计划书
2014/05/03 职场文书
给病人的慰问信
2015/03/23 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
python数字图像处理之图像的批量处理
2022/06/28 Python