如何在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
相关产品推荐
相关产品推荐

