如何在Pandas中根据布尔值将列名转换为对应值?
解决方案
你可以通过 pandas 的 melt 方法结合布尔筛选来实现这个转换,步骤如下:
方法实现
假设你的原 DataFrame 名为 df,执行以下代码:
import pandas as pd # 构造示例数据(替换成你的实际数据) df = pd.DataFrame({ 500: ['Tr', 'Tr'], 600: ['Fls', 'Tr'], 700: ['Fls', 'Tr'], 800: ['Fls', 'Fls'] }) # 1. 将宽表转为长格式,把原列名映射为Value列 melted_df = df.melt(var_name='Value', value_name='Status', ignore_index=False) # 2. 筛选出Status为'Tr'的行,仅保留Value列 result_df = melted_df[melted_df['Status'] == 'Tr'][['Value']].reset_index(drop=True) print(result_df)
输出结果
运行后会得到符合需求的结构:
Value 0 500 1 500 2 600 3 700
原理说明
melt函数将原 DataFrame 的列名(500、600 等)转换为Value列的内容,原单元格的Tr/Fls存入Status列。- 通过布尔索引筛选出
Status为Tr的行,只保留Value列,最后重置索引得到目标结构。
内容的提问来源于stack exchange,提问作者RogerKint
相关产品推荐
相关产品推荐

