使用pandas在新列中聚合



我有以下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

最新更新