如何用pivot、多级索引等方法转换指定的Pandas DataFrame?
解决方案:用Pandas内置方法轻松转换格式
当然可以用Pandas的内置方法快速实现,完全不需要手动遍历!这里推荐两种简单高效的方式:pivot() 和 pivot_table(),都能完美满足你的需求。
首先先回顾下你的原始数据:
import pandas as pd import numpy as np df = pd.DataFrame([ [np.nan, 2, 'x', 0], [3, 4, 'y', 0], [9, 6, 'x', 1], [np.nan, np.nan, 'y', 1]], columns=['ignore', 'value', 'col', 'row']) print(df)
输出:
ignore value col row 0 NaN 2.0 x 0 1 3.0 4.0 y 0 2 9.0 6.0 x 1 3 NaN NaN y 1
方法1:使用pivot()函数
pivot()是专门用于长表转宽表的函数,非常适合你的数据场景(每个row+col组合唯一)。只需要指定三个核心参数:
index:作为结果行索引的列(这里是row)columns:作为结果列名的列(这里是col)values:填充到结果单元格中的值(这里是value)
代码实现:
pivoted_df = df.pivot(index='row', columns='col', values='value').reset_index(drop=True) print(pivoted_df)
输出:
col x y 0 2.0 4.0 1 6.0 NaN
刚好和你想要的格式完全一致!最后用reset_index(drop=True)是为了去掉原来的row索引,让结果的行索引变成0、1这样的默认序列。
方法2:使用pivot_table()函数
如果你的数据中存在重复的row+col组合(比如同一个row和col对应多个value),可以用pivot_table(),它支持通过aggfunc参数指定聚合方式(比如取第一个值、均值、求和等)。对于你的数据,用aggfunc='first'就能得到同样的结果:
pivoted_df = df.pivot_table(index='row', columns='col', values='value', aggfunc='first').reset_index(drop=True) print(pivoted_df)
输出和上面完全相同。
这两种方法都是Pandas的向量化操作,比手动遍历高效得多,尤其是处理大数据量时优势更明显。
内容的提问来源于stack exchange,提问作者orak
相关产品推荐
相关产品推荐

