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

如何将pandas DataFrame中的多列Value与Rental分别合并为单列

Pandas多列合并解决方案

首先匹配所有需要合并的Value列和Rental列,再根据你的合并需求选择对应方法:

前置代码(列筛选)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取原始数据
df = pd.read_excel('HW2_Data.xlsx', sheet_name='Problem 4')

# 筛选所有列名包含Value的列
value_cols = [col for col in df.columns if 'Value' in col]
# 筛选所有列名包含Rental的列
rental_cols = [col for col in df.columns if 'Rental' in col]

原数据结构参考:
DataFrame数据结构示例

方案1:按行合并(每行仅保留1个有效值场景)

如果同一行的多个Value列只有1个非空值,需要把每行的非空Value合并到同一列,Rental同理,使用如下代码:

# 合并Value列:取每行第一个非空的Value值
df['Value'] = df[value_cols].bfill(axis=1).iloc[:, 0]
# 合并Rental列
df['Rental'] = df[rental_cols].bfill(axis=1).iloc[:, 0]

# 删去原始多列,仅保留需要的字段
df_final = df.drop(columns=value_cols + rental_cols)
print(df_final)

方案2:按列堆叠(宽表转长表场景)

如果需要把所有Value列的数值全部堆叠为单列,对应的Rental列也同步堆叠,使用如下代码:

# 提取不需要参与转换的公共维度列(如ID、类别、日期等)
id_cols = [col for col in df.columns if col not in value_cols + rental_cols]

# 转换Value列为长表
value_df = pd.melt(df, id_vars=id_cols, value_vars=value_cols, value_name='Value').drop('variable', axis=1)
# 转换Rental列为长表
rental_df = pd.melt(df, id_vars=id_cols, value_vars=rental_cols, value_name='Rental').drop('variable', axis=1)

# 合并结果并删除空值行
df_final = pd.concat([value_df, rental_df['Rental']], axis=1).dropna(subset=['Value', 'Rental']).reset_index(drop=True)
print(df_final)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:05