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

如何实现Pandas DataFrame行转列为单行格式?pivot结果异常求解

解决DataFrame pivot后出现NaN的问题

首先,咱们先复现一下你的原始数据和问题场景:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'type': ['IP_1', 'IP_2'],
    'result': [['a', 'b'], ['c', 'd']]
})

# 你尝试的pivot操作
wrong_pivot = df.pivot(columns='type', values='result')
print(wrong_pivot)
# 输出:
#    IP_1        IP_2
# 0  NaN        ['a', 'b']
# 1  ['c', 'd']  NaN

问题原因

之所以会出现NaN,是因为pivot默认会保留原始DataFrame的行索引作为结果的行索引。你的原始数据有两行(索引0和1),所以pivot后,IP_1只会在它原本所在的行(索引0)有值,IP_2只会在它原本所在的行(索引1)有值,其他位置自然就是NaN了。

解决方案

我们需要让所有type对应的result值都放到同一行里,这里给你几种实用的方法:

方法1:添加临时分组列(最直观)

给所有行添加一个相同的临时列,让pivot把它们归为同一组:

# 添加临时列,所有行值都为0
df['temp'] = 0
# 以temp为索引,type为列,result为值做pivot
pivoted_df = df.pivot(index='temp', columns='type', values='result')
# 去掉临时索引,得到你想要的格式
pivoted_df = pivoted_df.reset_index(drop=True)

print(pivoted_df)
# 输出:
#        IP_1        IP_2
# 0  ['a', 'b']  ['c', 'd']

方法2:用groupby + unstack

通过分组聚合把每个type对应的result提取出来,再转成列:

# 按type分组,取每个组的第一个result值(这里每个type只有一个值)
grouped = df.groupby('type')['result'].first()
# 把行索引转成列,再转成DataFrame并调整为一行
pivoted_df = grouped.unstack().to_frame().T

print(pivoted_df)
# 输出和上面一致

方法3:直接构造新DataFrame

如果你的数据量不大,也可以直接遍历原始行来构造目标格式:

pivoted_df = pd.DataFrame({
    row['type']: [row['result']] for _, row in df.iterrows()
})

print(pivoted_df)
# 同样得到你想要的结果

内容的提问来源于stack exchange,提问作者WindCheck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:47:35