这些是一系列融化和旋转命令。我不确定它是否是最佳的,但它可以到达你想要的地方。另外,也许使用pd.to_datetime 来确保您的“时间戳”列是日期时间格式。
df = pd.DataFrame({"Kharid-et_Heat" : {0 : "a", 1 : "b", 2 : "c"},
"Kharid-et_Humidity" : {0 : "d", 1 : "e", 2 : "f"},
"Zzetek_Heat" : {0 : 2.5, 1 : 1.2, 2 : .7},
"Zzetek_Humidity" : {0 : 3.2, 1 : 1.3, 2 : .1}
})
df["Timestamp"] = [datetime.datetime(2021, 3, 15, 11, 9, 15), datetime.datetime(2021, 3, 16, 11, 9, 15),\
datetime.datetime(2021, 3, 17, 11, 9, 15)]
df["Timestamp"]=pd.to_datetime(df["Timestamp"])
df=pd.wide_to_long(df, stubnames=['Kharid-et','Zzetek'], i=["Timestamp"], j="Parameter",sep='_', suffix='\w+')\
.reset_index(level=[0,1])
df1=df.melt(id_vars=["Timestamp", "Parameter"], value_vars=["Kharid-et", "Zzetek"])\
.pivot(index=["Timestamp", "variable"], columns="Parameter", values="value")\
.sort_index(level=[0,1])\
.reset_index(level=1)
print(df1)
输出
Parameter variable Heat Humidity
Timestamp
2021-03-15 11:09:15 Kharid-et a d
2021-03-15 11:09:15 Zzetek 2.5 3.2
2021-03-16 11:09:15 Kharid-et b e
2021-03-16 11:09:15 Zzetek 1.2 1.3
2021-03-17 11:09:15 Kharid-et c f
2021-03-17 11:09:15 Zzetek 0.7 0.1