如何使用Pandas重塑指定DataFrame?已尝试pd.pivot和pd.melt未果
解决方案
你需要先通过melt将A、B这类列转换为行维度,再通过pivot将Item转换为列维度,两步结合就能得到目标格式:
步骤1:构造原数据集(示例)
import pandas as pd df = pd.DataFrame({ 'Date': [1, 1, 1], 'Item': [1, 2, 3], 'A': ['a1', 'a2', 'a3'], 'B': ['b1', 'b2', 'b3'] })
步骤2:使用melt转换列维度
将A、B列拆分为Letter(存储A/B)和Value(存储对应值)两列,保留Date和Item作为标识列:
melted = df.melt(id_vars=['Date', 'Item'], var_name='Letter', value_name='Value')
此时输出的melted结构:
| Date | Item | Letter | Value |
|---|---|---|---|
| 1 | 1 | A | a1 |
| 1 | 2 | A | a2 |
| 1 | 3 | A | a3 |
| 1 | 1 | B | b1 |
| 1 | 2 | B | b2 |
| 1 | 3 | B | b3 |
步骤3:使用pivot转换行维度
将Item列的值转为新的列,以Date和Letter作为索引,最后重置索引并重命名列:
result = melted.pivot(index=['Date', 'Letter'], columns='Item', values='Value').reset_index() # 重命名列,匹配目标格式的"Item X"命名 result.columns = ['Date', 'Letter'] + [f'Item {col}' for col in result.columns[2:]]
最终得到的result就是你需要的格式:
| Date | Letter | Item 1 | Item 2 | Item 3 |
|---|---|---|---|---|
| 1 | A | a1 | a2 | a3 |
| 1 | B | b1 | b2 | b3 |
补充说明
如果你的数据集包含多个不同的Date值,这个方法依然适用,因为pivot时已将Date纳入索引,会自动按日期分组转换。
内容的提问来源于stack exchange,提问作者kyara
相关产品推荐
相关产品推荐

