如何基于多列特定值将Pandas DataFrame行值转换为列
解决方案:Pandas DataFrame 按指定列重塑(透视)
可以使用Pandas的pivot方法直接实现需求,该方法能快速将指定列的取值转换为新列,并按分组填充对应的值。
完整代码示例
import pandas as pd # 初始化原始DataFrame df = pd.DataFrame({ "Year":[2023, 2023, 2023, 2024, 2024, 2024], "Value":[0, 2, 3, 1, 5, 2], "Field":["A", "A", "B", "A", "B", "B"], "ID":["X", "X", "X", "X", "Z", "Y"], "Type":["class1","class2","class1","class1","class1","class2"] }) # 执行透视操作,重塑DataFrame result_df = df.pivot( index=["Year", "Field", "ID"], columns="Type", values="Value" ).reset_index() # 移除列索引的名称,让输出格式更匹配需求 result_df.columns.name = None # 查看结果 print(result_df)
代码说明
pivot参数解析:index=["Year", "Field", "ID"]:将这三列作为行的唯一标识,确保相同组合的行被合并为一行columns="Type":把Type列的不同取值(class1/class2)转换为新的列名values="Value":将Value列的数值填充到对应分组和Type列的交叉位置,没有对应值的位置自动填充NaN
reset_index():将原本作为索引的Year/Field/ID转换为普通列,恢复成常规的DataFrame结构columns.name = None:移除透视后默认保留的列索引名称(原Type),让输出完全匹配期望格式
输出结果
Year Field ID class1 class2 0 2023 A X 0.0 2.0 1 2023 B X 3.0 NaN 2 2024 A X 1.0 NaN 3 2024 B Z 5.0 NaN 4 2024 B Y NaN 2.0
内容的提问来源于stack exchange,提问作者user026
相关产品推荐
相关产品推荐

