You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:30:45