【Python基础】Pandas三种实现数据透视表的方法

前言

主要想做的事情用大白话来讲就是:一个dataframe里面对于两个列做分组,最后算一个value对应于这两个列的分组来算值的矩阵,这个矩阵的行为其中一个列,列也为其中一个列。

新建一个df

import pandas as pd
import numpy as np
v = [1, 2, 3, 3, 3]
a = pd.DataFrame({'v': v})
d = [2 , 4, 4, 5, 4]
a['d'] = d
c = ['c' , 'h', 'd', 'e',  'c']
a['c'] = c

df用两列进行分组grouby

a.groupby(['v', 'd'])['c'].count()

我的要干的事情 就是把这个v当作列index,d当作行columns,之后把对应的分组的’c‘.count()放到对应的索引loc处,不存在的值用0填补。

最后得到一个以v为index, d为column的df,也可以搞成对应的矩阵matrix

第一种方法:pd.crosstab

cpd = pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count')
cpd

查看index和columns

我们再来一步就可以得到我们想要的了,把nan填充一下。

cpd = cpd.fillna(0)
cpd

转换为array和list的方法

cpd_arr1 = np.array(cpd)
cpd_arr2 = np.array(cpd.values.tolist())
cpd_arr3 = cpd.as_matrix()
cpd_list = cpd.values.tolist()

整体流程

cpd = pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count')
cpd = cpd.fillna(0)
cpd_arr = np.array(cpd)
cpd_arr

总结一句话

np.array(pd.crosstab(a['v'], a['d'], a['c'], aggfunc='count').fillna(0))

第二种方法:pivot()

groupby的as_index=False

a.groupby(['v', 'd'], as_index=False)['c'].count()

把操作的三列的值恢复到df上,每一个列还是对应的列。

pivot

a.groupby(['v', 'd'], as_index=False)['c'].count().pivot('v', 'd', 'c')

对应关系如下:

整体流程

ppd = a.groupby(['v', 'd'], as_index=False)['c'].count().pivot('v', 'd', 'c')
ppd = ppd.fillna(0)
ppd_arr = np.array(ppd)
ppd_arr

总结一句话

np.array(a.groupby(['v', 'd'], as_index=False)['c'].count().pivot('v', 'd', 'c').fillna(0))

第三种方法:pivot_table

pivoted_df=pd.pivot_table(a[['v','d','c']], 
                          values='c', index=['v'],
                          columns=['d'], aggfunc='count')
pivoted_df

往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群请扫码进群(如果是博士或者准备读博士请说明):
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,可以使用pandas库的pivot_table函数实现数据透视表的功能[^1][^1]。pivot_table函数的基本语法如下: ```python pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False) ``` 其,参数说明如下: - data:要进行数据透视的数据集。 - values:要聚合的列名。 - index:作为行索引的列名。 - columns:作为列索引的列名。 - aggfunc:聚合函数,默认为'mean',表示计算均值。 - fill_value:用于填充缺失值的值。 - margins:是否显示行和列的汇总,默认为False。 - dropna:是否删除包含缺失值的行,默认为True。 - margins_name:汇总行和列的名称,默认为'All'。 - observed:是否观察到所有的值,默认为False。 下面是一个示例,演示如何使用pivot_table函数进行数据透视表操作: ```python import pandas as pd # 创建示例数据集 data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'], 'City': ['New York', 'London', 'Paris', 'New York', 'London', 'Paris'], 'Salary': [5000, 6000, 7000, 5500, 6500, 7500]} df = pd.DataFrame(data) # 使用pivot_table函数进行数据透视 pivot_table = pd.pivot_table(df, values='Salary', index='Name', columns='City', aggfunc='mean') print(pivot_table) ``` 运行以上代码,将会输出以下结果: ``` City London New York Paris Name Alice NaN 5250.0 NaN Bob 6250.0 NaN NaN Charlie NaN NaN 7250.0 ``` 这个结果展示了根据姓名和城市对薪水进行了聚合,并以姓名作为行索引,以城市作为列索引的数据透视表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值