如何在Pandas DataFrame中透视均值:以周为列、原列为Type行
实现DataFrame均值透视的方法
原始DataFrame:
| ID | 周数 | A | B |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 2 |
| 1 | 2 | 2 | 1 |
| 2 | 2 | 2 | 3 |
目标结构:
| 类型 | 第1周 | 第2周 | ... | 第N周 |
|---|---|---|---|---|
| A | 1 | 2 | ... | |
| B | 1.5 | 2 | ... |
可以用pandas的melt和pivot_table组合实现,步骤如下:
- 构造原始数据并转成长格式,将A、B列合并为"类型"列,对应值存入"数值"列:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ "ID": [1,2,1,2], "周数": [1,1,2,2], "A": [1,1,2,2], "B": [1,2,1,3] }) # 转换为长格式 melted_df = df.melt(id_vars=["ID", "周数"], var_name="类型", value_name="数值")
- 生成透视表,按"类型"分组、"周数"为列,计算数值的均值:
pivot_df = melted_df.pivot_table(index="类型", columns="周数", values="数值", aggfunc="mean")
- 调整列名格式,并重置索引让"类型"成为普通列:
pivot_df.columns = [f"第{week}周" for week in pivot_df.columns] pivot_df = pivot_df.reset_index()
执行完成后,pivot_df即为目标结构的DataFrame。
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

