Jac*_*ack 2 python pandas pyspark
我有一个类似于以下示例的数据框:
| ID | 类型 | 值_1 | 值_2 |
|---|---|---|---|
| 1234 | A | 1 | 2 |
| 1234 | 乙 | 1 | 2 |
| 第789章 | A | 1 | 2 |
| 第789章 | 乙 | 1 | 2 |
| 第567章 | A | 1 | 2 |
我想转换以获得以下内容:
| ID | 值_1_A | 值_1_B | 值_2_A | 值_2_B |
|---|---|---|---|---|
| 1234 | 1 | 1 | 2 | 2 |
| 第789章 | 1 | 1 | 2 | 2 |
| 第567章 | 1 | 1 |
总之:使用“类型”列作为后缀复制值列并将数据帧转换为宽格式。
有没有任何干净、简单的方法可以在 pyspark 数据框或 pandas 上执行此操作?
然后,pandas我们将pivot使用以下命令折叠多索引Index.map:
new_df = df.pivot(index='Id', columns='Type')
new_df.columns = new_df.columns.map('_'.join)
# Or with an explicit format string like:
# new_df.columns = new_df.columns.map('{0[0]}_{0[1]}'.format)
new_df = new_df.reset_index()
Run Code Online (Sandbox Code Playgroud)
new_df:
Id Value_1_A Value_1_B Value_2_A Value_2_B
0 567 1.0 NaN 2.0 NaN
1 789 1.0 1.0 2.0 2.0
2 1234 1.0 1.0 2.0 2.0
Run Code Online (Sandbox Code Playgroud)
数据框和导入:
import pandas as pd
df = pd.DataFrame({'Id': {0: 1234, 1: 1234, 2: 789, 3: 789, 4: 567},
'Type': {0: 'A', 1: 'B', 2: 'A', 3: 'B', 4: 'A'},
'Value_1': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1},
'Value_2': {0: 2, 1: 2, 2: 2, 3: 2, 4: 2}})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |