看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本案例是数据重塑中一个非常典型的应用场景,需要将一个 DataFrame 结构的数据转为一行,即将二维的数据展开。
源数据如下,是一个典型的 Pandas DataFrame 结构:
import pandas as pd
df = pd.DataFrame({
'a': ['a1', 'a2', 'a3'],
'b': [11, 22, 33],
'c': [44, 55, 66]
})
df
'''
a b c
0 a1 11 44
1 a2 22 55
2 a3 33 66
'''
我们需要将它转换一行,即以下形式:
'''
a b c a b c a b c
0 a1 11 44 a2 22 55 a3 33 66
'''
先对数据进行堆叠,将所有数据放在列上,再转置,会呈现在一行上。
首先我们用 df.stack() 将数据堆叠起来:
df.stack()
'''
0 a a1
b 11
c 44
1 a a2
b 22
c 55
2 a a3
b 33
c 66
dtype: object
'''
由于结果是一个 Series,实现不了转置效果,先将它 to_frame() 转为 DataFrame 再用 T 做操作:
(
df.stack()
.to_frame()
.T
)
'''
0 1 2
a b c a b c a b c
0 a1 11 44 a2 22 55 a3 33 66
'''
在行方向上为两层索引,我们只需要保留最里层索引,droplevel 可以实现,axis=1 表示在行方向执行:
(
df.stack()
.to_frame()
.T
.droplevel(0, axis=1)
)
'''
a b c a b c a b c
0 a1 11 44 a2 22 55 a3 33 66
'''
其他方法:
pd.concat([i for _, i in df.iterrows()], axis=0).to_frame().T
最终得到了我们想要的结果,如果有需要,还可以再对列名进行重命名。
更新时间:2024-08-18 15:37:29 标签:pandas python 转置