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实现对excel文件列表值进行统计的方法
Jul 25 Python
python运行时间的几种方法
Jun 17 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
Python3.6简单反射操作示例
Jun 14 Python
python模块导入的细节详解
Dec 10 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
python动态进度条的实现代码
Jul 03 Python
Python实现结构体代码实例
Feb 10 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
php实现的双向队列类实例
2014/09/24 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
深入分析js中的constructor和prototype
2012/04/07 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
基于Vue实现拖拽功能
2020/07/29 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python版简单工厂模式
2017/10/16 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
python文件和文件夹复制函数
2020/02/07 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
机电一体化专业应届生求职信
2013/11/27 职场文书
查环查孕证明
2014/01/10 职场文书
《长征》教学反思
2014/04/27 职场文书
小学生通知书评语
2014/12/31 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
初中化学教学反思
2016/02/22 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL