在Pandas中关联成本与对应概率列并重塑DataFrame
Pandas DataFrame 格式转换解决方案
原始数据代码
import pandas as pd df = pd.DataFrame({'cost_m1': [10, 11, 140], 'cost_m2': [130, 90, 110], 'cost_m3': [80, 110, 120], 'prob_m1': [0.1, 0.11, 0.25], 'prob_m2':[0.13, 0.19, 0.19], 'prob_m3':[0.21, 0.11, 0.14] }) df = df.reset_index() # 确保索引与行数匹配
目标格式说明
需要将上述宽表转换为包含index、Model、Measure、Value四列的长表:
Model对应原列名中的m1/m2/m3Measure对应原列名中的cost/probValue为对应列的数值
解决方案代码
# 转长表,保留index列 melted_df = df.melt(id_vars='index', var_name='combined', value_name='Value') # 拆分合并的列名,得到Measure和Model melted_df[['Measure', 'Model']] = melted_df['combined'].str.split('_', expand=True) # 调整列顺序并排序,得到最终结果 result_df = melted_df[['index', 'Model', 'Measure', 'Value']].sort_values(by=['index', 'Model']).reset_index(drop=True) # 查看结果 print(result_df)
输出示例
index Model Measure Value 0 0 m1 cost 10.0 1 0 m1 prob 0.1 2 0 m2 cost 130.0 3 0 m2 prob 0.13 4 0 m3 cost 80.0 5 0 m3 prob 0.21 6 1 m1 cost 11.0 7 1 m1 prob 0.11 8 1 m2 cost 90.0 9 1 m2 prob 0.19 10 1 m3 cost 110.0 11 1 m3 prob 0.11 12 2 m1 cost 140.0 13 2 m1 prob 0.25 14 2 m2 cost 110.0 15 2 m2 prob 0.19 16 2 m3 cost 120.0 17 2 m3 prob 0.14
内容的提问来源于stack exchange,提问作者Venugopal Bukkala
相关产品推荐
相关产品推荐

