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

如何在Pandas中基于自身内容将DataFrame重排为指定宽表格式

DataFrame重排与数据填充问题

需求说明

原始DataFrame结构:

Value   Time Point  Sample Number
    0   6.9     T000        1
    1   3.45    T000        2
    2   0.159   T000        3
    3   2.933   T024        4
    4   2.9     T024        5
    5   1.88    T024        6

需要重排为以下格式,以Time Point为索引,Sample Number为列:

Sample Number   1    2      3       4       5      6
             T000  6.9  3.45  0.159    NaN     NaN    NaN
             T024  NaN  NaN    NaN    2.933    2.9    1.88

现有代码

import pandas as pd

data = [["6.9", "T000","1"],
        ["3.45", "T000","2"],
        ["0.159", "T000","3"],
        ["2.933", "T024","4"],
        ["2.9", "T024","5"],
        ["1.88", "T024","6"]] 
    
df_data = pd.DataFrame(data)
    
df_data.columns = ["Value", "Time Point", "Sample Number"]
    
df_data_new = pd.DataFrame(columns = df_data["Sample Number"], index = df_data["Time Point"].unique())

解决方案

方法1:直接使用pivot函数(推荐)

Pandas的pivot方法可以直接完成这类行列转换,无需手动创建空DataFrame,一步到位:

# 先把Value列转为数值类型(原始数据为字符串,需转换)
df_data['Value'] = pd.to_numeric(df_data['Value'])

# 使用pivot生成目标DataFrame
df_data_new = df_data.pivot(index='Time Point', columns='Sample Number', values='Value')

方法2:基于已创建的空DataFrame填充数据

如果你想沿用自己创建的空DataFrame,可以通过遍历原始数据的方式填充:

# 先转换Value类型
df_data['Value'] = pd.to_numeric(df_data['Value'])

# 遍历每一行数据,填充到对应位置
for _, row in df_data.iterrows():
    time_point = row['Time Point']
    sample_num = row['Sample Number']
    df_data_new.loc[time_point, sample_num] = row['Value']

两种方法最终都能得到目标格式的DataFrame,其中pivot方法更简洁高效,适合处理这类结构化的行列转换需求。

内容的提问来源于stack exchange,提问作者radiosan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:33:15