如何在R中转置含重复标签列与观测列的两列DataFrame
解决方法
要将堆叠的长格式DataFrame转换为目标宽格式,用Pandas可以按以下步骤操作:
1. 导入库并对应你的数据结构
import pandas as pd # 模拟你的原始DataFrame(替换成你自己的数据集即可) data = { 'Labels': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], 'Observations': ['x1a', 'x1b', 'x1c', 'x2a', 'x2b', 'x2c', 'x3a', 'x3b', 'x3c'] } df = pd.DataFrame(data)
2. 添加分组序号
给每个标签的观测值分配组内序号,确保同一组的A、B、C能对应到同一行:
df['row_id'] = df.groupby('Labels').cumcount()
3. 转换为宽格式
用pivot方法重塑数据:
result_df = df.pivot(index='row_id', columns='Labels', values='Observations').reset_index(drop=True)
执行后result_df就是你想要的结构,输出结果如下:
| A | B | C | |
|---|---|---|---|
| 0 | x1a | x1b | x1c |
| 1 | x2a | x2b | x2c |
| 2 | x3a | x3b | x3c |
另一种实现方式:用unstack
也可以通过设置索引后unstack完成转换:
df['row_id'] = df.groupby('Labels').cumcount() result_df = df.set_index(['row_id', 'Labels'])['Observations'].unstack('Labels').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Matias Ochoa
相关产品推荐
相关产品推荐

