我有一个非常混乱的数据框。 df 看起来像这样:
student_id date measure level measure.1 level.1....
804322 9/2/2022 some string more string some string more string
3424234 9/3/2023 some string more string some string more string
2132121 4/5/2022 some string more string some string more string
这继续到 measure 和 level 2 和 3。我想做的是将 measure.1、measure.2 和 measure.3 放入一列,并为每一行重复日期和学生 ID 的值创建。另外对 level、level.1 等做同样的事情。任何帮助将不胜感激!
IIUC,你可以使用:
out = (df.set_index(["student_id", "date"])
.set_axis(df.columns[2:].str.split(".", expand=True), axis=1)
.stack(1).droplevel(-1).reset_index()
)
输出:
print(out)
student_id date level measure
0 804322 9/2/2022 more string some string
1 804322 9/2/2022 more string some string
2 3424234 9/3/2023 more string some string
3 3424234 9/3/2023 more string some string
4 2132121 4/5/2022 more string some string
5 2132121 4/5/2022 more string some string