You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 02:54:01