我有以下pandas
数据帧:
time mes mech
0 1 50 A
1 2 15 A
2 3 16 A
3 1 17 B
4 2 49 B
5 3 62 B
我想通过time
聚合它,然后为每个mech
重新命名列,如下所示:
time mes_A mes_B
0 1 50 17
1 2 15 49
2 3 16 62
最好的方法是什么?
你可以这样做:
df = pd.DataFrame({"time": [1, 2, 3, 1, 2, 3], "mes": [50, 15, 16, 17, 49, 62], "mech": ["A", "A", "A", "B", "B", "B"]})
def agg_mech(row):
return {f"mech_{v}": v for v in row}
df2 = df.groupby("time").agg({"mes": "first", "mech": agg_mech})
df2 = df2.merge(df2.mech.apply(pd.Series), left_index=True, right_index=True).drop(columns=["mech"])
out = (df.pivot('time', 'mech', 'mes')
.add_prefix('mech_')
.reset_index())
out.columns.name = None
print(out)
输出:
time mech_A mech_B
0 1 50 17
1 2 15 49
2 3 16 62