看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
数据透视和对列的重新排序是数据分析和报告过程中常用的工具和技术。它们可以帮助你更好地理解和分析数据,从而支持决策和洞察力的发现。透视和重新排序数据可以为数据可视化提供更好的输入。通过对数据进行透视,你可以将数据重新排列成适合绘图的形式,以更清晰地展示趋势、关系和模式。
我们构造数据如下:
import pandas as pd
import io
data = '''
x1 x2 x3 value
A LA 6T 1
A SA 6T 2
A USA 6T 3
A LA 7T 4
A SA 7T 5
A USA 7T 6
B LA 6T 7
B SA 6T 8
B USA 6T 9
B LA 7T 10
B SA 7T 11
B USA 7T 12
'''
df = pd.read_csv(io.StringIO(data), sep=r'\s+')
df
# ...
对以上数据进行透视,并将 x2 列的顺序进行调整,最终结果如下:
'''
x3 6T 7T
x2 SA LA USA SA LA USA
x1
A 2.0 1.0 3.0 5.0 4.0 6.0
B 8.0 7.0 9.0 11.0 10.0 12.0
'''
先用 DataFrame 的 pivot_table()
对数据进行透视,这样就基本完成了数据的形式调整,接下来就要调整多层索引的列的顺序调整。
可以定义两个层的数据为列表,用列表推导式完成顺序构造,再用 reindex()
应用新的索引顺序。
先进行透视:
df.pivot_table(values='value',
index='x1',
columns=['x3', 'x2']
)
'''
x3 6T 7T
x2 LA SA USA LA SA USA
x1
A 1.0 2.0 3.0 4.0 5.0 6.0
B 7.0 8.0 9.0 10.0 11.0 12.0
'''
构造多层索引的数据:
lev_0 = ['6T', '7T']
lev_1 = ['SA', 'LA', 'USA']
idx_lst = [(i0, i1)for i0 in lev_0 for i1 in lev_1]
idx_lst
'''
[('6T', 'SA'),
('6T', 'LA'),
('6T', 'USA'),
('7T', 'SA'),
('7T', 'LA'),
('7T', 'USA')]
'''
最后用 reindex()
应用新的索引顺序:
(
df.pivot_table(values='value',
index='x1',
columns=['x3', 'x2']
)
.reindex(idx_lst, axis=1)
)
'''
x3 6T 7T
x2 SA LA USA SA LA USA
x1
A 2.0 1.0 3.0 5.0 4.0 6.0
B 8.0 7.0 9.0 11.0 10.0 12.0
'''
总结下代码逻辑。这段代码的目的是对DataFrame df 进行数据透视,并重新排序列,具体步骤如下:
index='x1'
表示将'x1'列作为行索引;columns=['x3', 'x2']
表示将'x3'和'x2'列作为列索引。这样就会根据'x1'、'x3'和'x2'的组合对'value'列进行汇总。reindex(lst, axis=1)
表示将列索引按照lst列表中的顺序重新排列,即根据lst中的元素对列进行重新排序。axis=1
表示对列进行操作。这样就完成了这个需求。
(完)
更新时间:Aug. 18, 2024, 4:22 p.m. 标签:pandas python 透视 排序