Pandas使用pivot生成透视表时保留age等额外列的实现方法
方案1:同一分组下age值唯一的场景(你的样例数据属于这类)
直接修改原pivot方法的index参数,把age加入分组维度即可,完整代码如下:
output = df.pivot(["Animal", "age", "Food"], "Day", "kg") \ .add_prefix("Day") \ .reset_index() \ .rename_axis(None, axis=1) # 可根据需要调整列顺序 output = output[["Animal", "Food", "age", "Day1", "Day2"]]
方案2:同一分组下存在多个age值、只需保留任意age的场景
如果同一个Animal/Animal+Food组合对应多个不同age,不想拆分多行只保留任意一个age,用如下实现:
# 按Animal分组取第一个出现的age作为映射规则,如果要按Animal+Food分组可把groupby参数改成["Animal", "Food"] age_map = df.groupby("Animal")["age"].first() # 原透视表逻辑不变 output = df.pivot(["Animal", "Food"], "Day", "kg") \ .add_prefix("Day") \ .reset_index() \ .rename_axis(None, axis=1) # 映射添加age列 output["age"] = output["Animal"].map(age_map) # 调整列顺序 output = output[["Animal", "Food", "age", "Day1", "Day2"]]
两种方案输出的结果都和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者MatheMarco
相关产品推荐
相关产品推荐

