如何转置带有多个索引列的PySpark DataFrame?
实现长表转宽表的解决方案
给定的原始DataFrame:
| ID | Company_Id | value | Approve or Reject |
|---|---|---|---|
| 1A | 3412asd | value-1 | Approve |
| 2B | 2345tyu | value-2 | Approve |
| 3C | 9800bvd | value-3 | Approve |
| 2B | 2345tyu | value-1 | Approve |
可以通过pandas的pivot方法直接实现需求,步骤如下:
- 构造示例数据(已有DataFrame可跳过此步骤):
import pandas as pd data = { 'ID': ['1A', '2B', '3C', '2B'], 'Company_Id': ['3412asd', '2345tyu', '9800bvd', '2345tyu'], 'value': ['value-1', 'value-2', 'value-3', 'value-1'], 'Approve or Reject': ['Approve', 'Approve', 'Approve', 'Approve'] } df = pd.DataFrame(data)
- 使用
pivot进行透视转换,指定索引、列和值:
pivot_df = df.pivot(index=['ID', 'Company_Id'], columns='value', values='Approve or Reject')
- 重置索引并将缺失值替换为'NULL':
pivot_df = pivot_df.reset_index().fillna('NULL')
- 移除列索引名称(可选,让结果格式更匹配需求):
pivot_df.columns.name = None
最终得到的结果如下:
| ID | Company_Id | value-1 | value-2 | value-3 |
|---|---|---|---|---|
| 1A | 3412asd | Approve | NULL | NULL |
| 2B | 2345tyu | Approve | Approve | NULL |
| 3C | 9800bvd | NULL | NULL | Approve |
内容的提问来源于stack exchange,提问作者Mikesama
相关产品推荐
相关产品推荐

