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

如何基于列值转置并修改Pandas DataFrame

如何基于列值转置并修改Pandas DataFrame

别担心,完全不用手动修改!用Pandas几行代码就能轻松实现这个转换,我给你两种实用的方法,按需选择就行~

首先,先把你的原始数据用Pandas构建出来(方便后续演示):

import pandas as pd

df = pd.DataFrame({
    'name': ['foo', 'bar', 'coo'],
    'A': [1, 0, 0],
    'B': [0, 1, 0],
    'C': [0, 0, 1]
})

方法一:利用idxmax快速匹配(适合每行只有一个1的场景)

因为你的数据里每行只有一个列值为1,这个方法效率最高:

# 将name列设为索引,方便后续转置匹配
df_indexed = df.set_index('name')
# 转置表格后,找到每行值为1对应的name(也就是索引)
result = df_indexed.T.idxmax(axis=1).reset_index()
# 重命名列,让结构符合需求
result.columns = ['', 'name']
# 设置第一列为索引,让输出格式和你期望的一致
result = result.set_index('')

运行后得到的result就是你想要的表格:

name
A    foo
B    bar
C    coo

方法二:用melt转置筛选(适合更通用的场景)

如果之后你的数据可能出现多个1的情况,这个方法更灵活:

# 把宽表转成长表,拆分出类别、标记和对应的name
melted_df = df.melt(id_vars='name', var_name='category', value_name='flag')
# 筛选出标记为1的行
filtered_df = melted_df[melted_df['flag'] == 1]
# 调整列顺序并设置索引,得到目标结构
result = filtered_df[['category', 'name']].set_index('category')

这个方法的输出和上面完全一致,而且扩展性更强,适合复杂一点的数据集。

这样就不用手动折腾表格啦,用代码一键搞定!

备注:内容来源于stack exchange,提问作者skoleosho97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:58:05