python - Pandas 使用列作为后缀进行透视

标签 python pandas pyspark

我有一个如下例所示的数据框:

<表类=“s-表”> <标题> ID 类型 Value_1 Value_2 <正文> 1234 一个 1 2 1234 B 1 2 789 一个 1 2 789 B 1 2 567 一个 1 2

我想转换以获得以下内容:

<表类=“s-表”> <标题> ID Value_1_A Value_1_B Value_2_A Value_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()

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

数据帧和导入:

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}})

关于python - Pandas 使用列作为后缀进行透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68925853/

相关文章:

python - 使用Python打印400空消息代码中的变量输出

python - 用于量化感知训练的 TF Lite 的 Toco 转换器参数说明

java - 堆空间错误: SparkListenerBus

python - 将 pd.value_counts() 和定义的变量附加到一行数据帧

python - 如何按特定顺序更新 Pandas 数据帧特定列的多个条目?

python - 在 pyspark 中处理大数字的数据类型

apache-spark - Py4JJavaError : An error occurred while calling o389..csv

python - 运行一个脚本,该脚本调用另一个脚本作为参数,而该脚本又具有参数

Python:将并行数组 reshape 为训练集

python - 如何在Python中将csv文件映射到另一个文件?