如何使用动态函数在PySpark中转置DataFrame数据
实现DataFrame的动态转置函数
需求说明
给定一个多行多列的Pandas DataFrame,编写一个以DataFrame为输入的动态函数,调用后可自动完成数据转置(例如输入5列3行的DataFrame,输出为3行5列的转置结果)。
示例DataFrame构造
先还原示例中的DataFrame,方便后续测试:
import pandas as pd data = { 'Product': ['Banana', 'Carrots', 'Beans', 'Orange', 'Orange', 'Banana', 'Carrots', 'Beans', 'Orange', 'Banana', 'Carrots', 'Beans'], 'Amount': [1000, 1500, 1600, 2000, 2000, 400, 1200, 1500, 4000, 2000, 2000, 2000], 'Country': ['USA', 'USA', 'USA', 'USA', 'USA', 'China', 'China', 'China', 'China', 'Canada', 'Canada', 'Mexico'] } df = pd.DataFrame(data)
动态转置函数实现
利用Pandas内置的转置功能,实现适配任意行列数的动态转置函数:
def transpose_df(input_df): # 执行转置并重置索引,让结果结构更规整 transposed_df = input_df.T.reset_index() # 自定义列名提升可读性,可按需调整命名规则 transposed_df.columns = ['Original_Columns'] + [f'Row_{i+1}' for i in range(len(transposed_df.columns)-1)] return transposed_df
函数调用示例
1. 示例DataFrame转置测试
transposed_result = transpose_df(df) print(transposed_result)
输出结果(截取核心部分):
Original_Columns Row_1 Row_2 Row_3 Row_4 Row_5 Row_6 Row_7 Row_8 Row_9 Row_10 Row_11 Row_12 0 Product Banana Carrots Beans Orange Orange Banana Carrots Beans Orange Banana Carrots Beans 1 Amount 1000 1500 1600 2000 2000 400 1200 1500 4000 2000 2000 2000 2 Country USA USA USA USA USA China China China China Canada Canada Mexico
2. 5列3行DataFrame转置测试
构造测试用的5列3行DataFrame:
test_df = pd.DataFrame({ 'Col1': [1,2,3], 'Col2': [4,5,6], 'Col3': [7,8,9], 'Col4': [10,11,12], 'Col5': [13,14,15] }) # 转置后得到3行5列的结果 print(transpose_df(test_df))
输出:
Original_Columns Row_1 Row_2 Row_3 0 Col1 1 2 3 1 Col2 4 5 6 2 Col3 7 8 9 3 Col4 10 11 12 4 Col5 13 14 15
补充说明
- 函数核心依赖Pandas的
T属性(与transpose()方法功能一致)完成转置 reset_index()用于将原DataFrame的列名转为新表的普通列,避免索引混乱- 自定义列名可根据实际需求修改,比如替换为业务场景相关的命名
内容的提问来源于stack exchange,提问作者Shivprasad Gadekar
相关产品推荐
相关产品推荐

