如何在Scala Spark中固定前两列并转置其余列
如何对单行DataFrame执行指定列的Unpivot操作
问题描述
我有一个单行的DataFrame,值的类型包括string、int、bool、array:
原DataFrame结构:
| col1 | col2 | col3 | col4 | col5 |
|---|---|---|---|---|
| val1 | val2 | val3 | val4 | val5 |
希望转换为如下结构:
| col1 | col2 | Columns | values |
|---|---|---|---|
| val1 | val2 | col3 | val3 |
| val1 | val2 | col4 | val4 |
| val1 | val2 | col5 | val5 |
要求前两列保持原样,其余列执行unpivot操作。
解决方案
使用Pandas的melt()方法即可实现需求,通过参数指定保留列和新列名称,同时兼容所有数据类型。
代码示例
import pandas as pd import numpy as np # 创建包含多种数据类型的示例DataFrame df = pd.DataFrame({ 'col1': ['val1'], 'col2': ['val2'], 'col3': [100], # int类型 'col4': [True], # bool类型 'col5': [np.array([1,2,3])] # array类型 }) # 执行unpivot转换 unpivoted_df = df.melt( id_vars=['col1', 'col2'], var_name='Columns', value_name='values' ) print(unpivoted_df)
输出结果
col1 col2 Columns values 0 val1 val2 col3 100 1 val1 val2 col4 True 2 val1 val2 col5 [1, 2, 3]
参数说明
id_vars:指定需要保持不变的列(此处为col1、col2)var_name:设置存储原列名的新列名称(此处为'Columns')value_name:设置存储原列值的新列名称(此处为'values')
内容的提问来源于stack exchange,提问作者Khilesh Chauhan
相关产品推荐
相关产品推荐

