如何利用pandas的pivot()方法,实现长表改宽表的操作?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
宽表改长表,使用的是pandas
的melt()
方法。那么,长表改宽表,使用的方法是pandas
的pivot
方法。本文就这种pivot()
方法进行简要的使用探讨。因为这个方法大概率会生成多重索引的dataframe
,理解起来有些费解并且不常见,所以,本文就是简单的探讨而已。
大家好,这里是苏南大叔的“程序如此灵动”博客,本文讨论长表变宽表的方法pivot()
。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。本文例子中的返回结果,不能用普通的方式去解读,因为索引都是复合多重的。仅供了解,目前是有些超纲。
pivot
,n.枢轴; 中心; 支点; 核心; 中心点; 最重要的人(或事物);v. (使)在枢轴上旋转(或转动);
函数说明
pivot
是Pandas
中的一个函数,可以将一个数据框中的列进行转换,使得某一列成为新的行索引,并用另一列的值来填充这个索引对应的单元格。有如下几个参数:
index
: 将要成为新的行索引的列名columns
: 将要成为新的列索引的列名values
: 将要填充新行索引和新列索引之间的单元格的列名
宽表改长表,主体的值会有冗余,但是还是能接受的。但是这个长表改宽表,颠覆了dataframe
中的labels
的概念,列名和行名都变成了个dataframe
,索引理解上是比较费解了。
标的数据
import pandas as pd
df = pd.DataFrame(
{
"name": ["虎子", "老许", "小黑"],
"head": [10, 30, 50],
"body": ["A", "B", "C"],
"foot": ["a", "b", "c"]
},
index=["a1", "a2", "a3"],
)
print(df)
输出:
name head body foot
a1 虎子 10 A a
a2 老许 30 B b
a3 小黑 50 C c
情况一,参数非数组
df_pivot = df.pivot(index='name', columns='head')
print(df_pivot)
输出:
body foot
head 10 30 50 10 30 50
name
小黑 NaN NaN C NaN NaN c
老许 NaN B NaN NaN b NaN
虎子 A NaN NaN a NaN NaN
df_pivot = df.pivot(index='name', columns='head', values='body')
print(df_pivot)
输出:
head 10 30 50
name
小黑 NaN NaN C
老许 NaN B NaN
虎子 A NaN NaN
df_pivot = df.pivot(index='name', columns='head')['body']
print(df_pivot,type(df_pivot))
输出:
head 10 30 50
name
小黑 NaN NaN C
老许 NaN B NaN
虎子 A NaN NaN
<class 'pandas.core.frame.DataFrame'>
情况二,参数为数组
df_pivot = df.pivot(index=['name','head'], columns='body', values='foot')
print(df_pivot)
输出:
body A B C
name head
小黑 50 NaN NaN c
老许 30 NaN b NaN
虎子 10 a NaN NaN
df_pivot = df.pivot(index=['name'], columns=['head','body'], values='foot')
print(df_pivot)
输出:
head 10 30 50
body A B C
name
小黑 NaN NaN c
老许 NaN b NaN
虎子 a NaN NaN
df_pivot = df.pivot(index=["name"], columns=["head"], values=["body", "foot"])
print(df_pivot)
输出:
body foot
head 10 30 50 10 30 50
name
小黑 NaN NaN C NaN NaN c
老许 NaN B NaN NaN b NaN
虎子 A NaN NaN a NaN NaN
结束语
苏南大叔并不打算在多重索引的dataframe
上做过多文章阐述,毕竟普通的dataframe
还没有搞清楚。所以,这接下来的多重索引的dataframe
内容就待续吧。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。