当我们在处理大量数据时,经常需要对数据进行重塑操作以达到更好的可视化效果。在Python中,pandas库提供了非常丰富的数据重塑操作方法,其中包括stack()、unstack()和pivot()方法。
stack()方法
在pandas的DataFrame中,stack()方法是基于列的透视操作,它将列中的数据压缩成一列,并利用层次化索引(MultiIndex)来表示数据中的列。使用stack()方法将列名转化为索引名后,原来的列就被压缩成了一列:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 2, 3], 'C': [4, 5, 6]})
print('----------------原始数据-----------------')
print(df)
stack_df = df.stack()
print('----------------stack后------------------')
print(stack_df)
该段代码运行结果如下:
----------------原始数据-----------------
A B C
0 a 1 4
1 b 2 5
2 c 3 6
----------------stack后------------------
0 A a
B 1
C 4
1 A b
B 2
C 5
2 A c
B 3
C 6
dtype: object
从结果可以看出,stack()将每列数据转为索引名,并将所有的列数据以行的形式展示出来。
unstack()方法
unstack()方法正好与stack()方法相反,它将透视表中的行数据展开成列数据。使用unstack()方法后,原来的行将被分成若干列,并且行中的索引名转化为列名:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 2, 3], 'C': [4, 5, 6]})
stack_df = df.stack()
unstack_df = stack_df.unstack()
print('----------------unstack后--------------')
print(unstack_df)
该段代码运行结果如下:
----------------unstack后--------------
A B C
0 a 1 4
1 b 2 5
2 c 3 6
从结果可以看出,unstack()将原来在行上的MultiIndex恢复到了列上。
pivot()方法
pivot()方法是另一种常用的数据透视操作,它可以将DataFrame的长格式转为宽格式。比如,下面的代码展示了如何将一个包含日期、城市和运动员得分信息的DataFrame转换为宽格式数据:
import pandas as pd
import numpy as np
df = pd.DataFrame({'date': ['2019-06-01', '2019-06-01', '2019-06-02', '2019-06-02'],
'city': ['beijing', 'shanghai', 'beijing', 'shanghai'],
'athlete': ['Amy', 'Amy', 'Bob', 'Bob'],
'score': [80, 75, 90, 85]})
pivot_df = df.pivot(index='date', columns='city', values='score')
print('----------------pivot后------------------')
print(pivot_df)
该段代码运行结果如下:
----------------pivot后------------------
city beijing shanghai
date
2019-06-01 80 75
2019-06-02 90 85
从结果可以看出,pivot()方法将原来的长格式数据转换为了宽格式数据,即将原来的每行数据都转化为了一个新的列,展示了每个运动员在不同日期、不同城市得分的情况。
以上就是对于pandas DataFrame中stack()方法、unstack()方法和pivot()方法的简单介绍及示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python DataFrame中stack()方法、unstack()方法和pivot()方法浅析 - Python技术站