我有一个结构如下的数据框:
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)
