Skip to main content
 首页 » 编程设计

python之如何从索引更改为多索引之pandas

2025年05月04日14powertoolsteam

我有一个结构如下的数据框:

dict1 = {'id': {0: 11, 1: 12, 2: 13, 3: 14, 4: 15, 5: 16, 6: 19, 7: 18, 8: 17}, 
 'var1': {0: 20.272108843537413, 
  1: 21.088435374149658, 
  2: 20.68027210884354, 
  3: 23.945578231292515, 
  4: 22.857142857142854, 
  5: 21.496598639455787, 
  6: 39.18367346938776, 
  7: 36.46258503401361, 
  8: 34.965986394557824}, 
 'var2': {0: 27.731092436974773, 
  1: 43.907563025210074, 
  2: 55.67226890756303, 
  3: 62.81512605042017, 
  4: 71.63865546218487, 
  5: 83.40336134453781, 
  6: 43.48739495798319, 
  7: 59.243697478991606, 
  8: 67.22689075630252}, 
 'var3': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 2, 7: 2, 8: 2}} 
ex = pd.DataFrame(dict1.to_dict()).set_index('id') 

id 设置为索引,但现在我想从 var3 和 id 创建一个 MultiIndex。但是我的以下尝试失败了:

ex.set_index(['var3', 'id']) 

然后如何直接从 Index 设置 MultiIndex?我知道我可以先reset_index,然后再设置一个 MultiIndex,但感觉必须有更优雅的方式。

请您参考如下方法:

DataFrame.set_index 有一个 append 参数,默认为 False。

如果您有一个 DataFrame 已经被 "id" 索引了,并且您想要将 "var3" 附加到它,只需调用:

new_df = ex.set_index("var3", append=True) 

正如@piRSquared 在评论中所建议的那样,如果您希望 "var3" 通过方法链调用 swaplevel 排在第一位,您也可以交换顺序。即:

new_df = ex.set_index("var3", append=True).swaplevel(0, 1)