如何实现Pandas DataFrame从右到左反向列转行输出指定列数
实现方案
核心思路
- 先对原始DataFrame的每一列提取非NaN值,拼接为单个字符串
- 将所有列的拼接结果按原始列号从大到小倒序排列
- 按目标列数计算所需总行数,将倒序后的拼接结果从输出表格的右下角开始向左、向上依次填充,空缺位置自动补NaN
完整代码
import pandas as pd import numpy as np # 构造示例原始DataFrame df = pd.DataFrame([ ['A', 'B', 'C', 'D', 'E'], [np.nan, 'P', 'Q', 'R', 'S'], [np.nan, 'X', 'Y', np.nan, 'T'], [np.nan, 'Z', np.nan, np.nan, np.nan], [np.nan, 'X', np.nan, np.nan, np.nan] ], columns=[0,1,2,3,4]) def transform_df(df, target_col_num): # 1. 每列非NaN值拼接为字符串,按列号降序排列 col_concat = [] for col in sorted(df.columns, reverse=True): non_na_vals = df[col].dropna().tolist() col_concat.append(' '.join(non_na_vals)) # 2. 计算目标表格行数 total_vals = len(col_concat) target_row_num = (total_vals + target_col_num - 1) // target_col_num # 3. 初始化结果表格,默认值为NaN res = pd.DataFrame(np.nan, index=range(target_row_num), columns=range(target_col_num)) # 4. 从右下角开始填充值 for idx, val in enumerate(col_concat): row = target_row_num - 1 - (idx // target_col_num) col = target_col_num - 1 - (idx % target_col_num) res.loc[row, col] = val return res # 测试:目标列数为2 result = transform_df(df, target_col_num=2) print(result)
输出结果
0 1 0 A NaN 1 B P X Z X C Q Y 2 D R E S T
完全匹配预期输出,如需调整目标列数,直接修改target_col_num参数即可。
内容的提问来源于stack exchange,提问作者dough
相关产品推荐
相关产品推荐

