Pandas转pivot, groupby等结果为dataFrame

问题背景:

在用Pandas进行数据分析和处理的时候,常会用到如goupby(),pivot()等方法,这些方法极大简化了我们的操作复杂度。但另一方面,这些操作之后返回的类型往往却并不是一个标准的DataFrame。具体的现象就是常会出现多出来的一级表头,而当我们想要再进行继续处理时,它的索引方式就发生变化了,不便于我们进一步操作。因此我们希望能够有一种方法将这些返回类型再次变为我们需要的DataFrame类型同时保持原有的表头。本文就这一问题进行简单描述。

给定数据(借用一下这位朋友的数据):

import pandas as pd
df= pd.DataFrame({'name': ['张三','李四','王五','张三','王五','张三','赵六','张三','赵六'],'sex': ['男','女','男','男','男','男','女','女','女'],'expense': [2.9,9.0,8.5,5.6,5.6,5.2,1.2,4.5,3.2],'income': [5.2,2.5,6.3,5.6,4.5,5.6,1.2,8.5,1.2]})

df的值

dfname sex  expense  income
0   张三   男      2.9     5.2
1   李四   女      9.0     2.5
2   王五   男      8.5     6.3
3   张三   男      5.6     5.6
4   王五   男      5.6     4.5
5   张三   男      5.2     5.6
6   赵六   女      1.2     1.2
7   张三   女      4.5     8.5
8   赵六   女      3.2     1.2

现在按性别统计他们的开销:

df_expense = df.groupby(['sex','name'])['expense'].agg(np.mean)

结果:

df_expensesex  name
女    张三      4.500000李四      9.000000赵六      2.200000
男    张三      4.566667王五      7.050000
Name: expense, dtype: float64

注意,此时的df_expense变成了series,因为这里我们只聚合了一列。而此时的前2列,实际上已经变成了df_expenseindex

df_expense.indexMultiIndex([('女', '张三'),('女', '李四'),('女', '赵六'),('男', '张三'),('男', '王五')],names=['sex', 'name'])

那么如果直接使用to_frame()方法则不能得到我们想要的结果(即sex,name,mean_expense各为一列):

pd.DataFrame(df_expense)expense
sex name
女   张三    4.500000李四    9.000000赵六    2.200000
男   张三    4.566667王五    7.050000

因为此时它的index仍然是刚才那个Series类型的index

还好Pandas实际上提供了一种机制,即重置索引。其基本原理是将每一列只要是表头的项全部放在一起,作为一个完整的表头名,从而实现将多级表头合并为同一个表头的效果:

df_new = pd.DataFrame(df_expense).reset_index()df_newsex name   expense
0   女   张三  4.500000
1   女   李四  9.000000
2   女   赵六  2.200000
3   男   张三  4.566667
4   男   王五  7.050000

再检查一下它的表头现在是哪些:

df_new.columnsIndex(['sex', 'name', 'expense'], dtype='object')

这样一来,df_new就又变回了我们想要的DataFrame类型,就方便我们操作了。

Pandas转pivot, groupby等结果为dataFrame--彻底解决多表头问题相关推荐

  1. python pandas库——pivot使用心得

    python pandas库--pivot使用心得 2017年12月14日 17:07:06 阅读数:364 最近在做基于python的数据分析工作,引用第三方数据分析库--pandas(versio ...

  2. pandas中pd.groupby()的用法

    在pandas中的groupby和在sql语句中的groupby有异曲同工之妙,不过也难怪,毕竟关系数据库中的存放数据的结构也是一张大表罢了,与dataframe的形式相似. import numpy ...

  3. pandas之分组groupby()的使用整理与总结

    文章目录 前言 准备 基本操作 可视化操作 REF 前言 在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分 ...

  4. pandas使用extract函数根据正则表达式从dataframe指定数据列的字符串中抽取出数字并生成新的数据列(extract numbers from column)

    pandas使用extract函数根据正则表达式从dataframe指定数据列的字符串中抽取出数字并生成新的数据列(extract numbers from column and generate n ...

  5. pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list

    pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list(index of rows with missing values in dataframe ...

  6. pandas使用iteritems函数迭代地查看dataframe中的每个数据列(iterate over each column of a dataframe)

    pandas使用iteritems函数迭代地查看dataframe中的每个数据列(iterate over each column of a dataframe) 目录 pandas使用iterite ...

  7. pandas创建内容全是0的dataframe、pandas基于随机整数、随机浮点数创建dataframe(random numbers)

    pandas创建内容全是0的dataframe.pandas基于随机整数.随机浮点数创建dataframe(random numbers) 目录 pandas创建内容全是0的dataframe.pan ...

  8. pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label)

    pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label) 目录

  9. pandas使用loc函数更新、修改dataframe指定数据行的内容(update or change the content of specific row of dataframe)

    pandas使用loc函数更新.修改dataframe指定数据行的内容(update or change the content of specific row of dataframe) 目录

最新文章

  1. node.js搭建简单服务器,用于前端测试websocket链接方法和性能测试
  2. 强烈推荐Bulletproof Ajax 中文版
  3. MYSQL专题-绝对实用的MYSQL优化总结
  4. java字段不序列化注解_@Transient注解的使用(不被序列化和作为临时变量存储)...
  5. Linux常用命令 -- screen
  6. python 获取向上两级路径_Python学习第171课--相对路径和绝对路径
  7. Linux(ubuntu)下切换root用户
  8. Nginx源码分析 - 基础数据结构篇 - hash表结构 ngx_hash.c(07)
  9. cad插件_CAD排版插件(附下载)
  10. 网络操作系统和分布式系统区别简介
  11. 洛谷【入门4】数组 P2141 [NOIP2014 普及组] 珠心算测验
  12. StudentManagerSystem(学生管理系统)(利用Result类,各种工具类)
  13. Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显
  14. .NET反编译工具Reflector及插件
  15. 互联网如何再定义古老的眼镜行业?
  16. 未来汽车是什么样?取消后视镜的车型将于2019年面世 | 行业
  17. C/C++_atoi,itoa功能及其实现原理
  18. Buildroot 制作根文件系统
  19. or计算遇到存在零“0”的情况
  20. 23/09/2022 c语言细节

热门文章

  1. louvian算法 缺点 优化_机器学习中的优化算法(1)-优化算法重要性,SGD,Momentum(附Python示例)...
  2. Win服务器2008和2012哪个更好?
  3. ios 中ARC与非ARC的转换
  4. Unity 字典实现
  5. 测开之路二十:比较v1和v2
  6. java之IO流(commons-IO)
  7. bootstrap 源码中部分不了解的css属性
  8. nginx 重写 隐藏index.php
  9. python之列表推导式 内置函数
  10. H5嵌入原生开发小结----兼容安卓与ios的填坑之路