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

如何在Pandas中将列2对应值合并到列1并按指定格式展示?

解决方案

这里提供两种简洁的实现方式,均基于Pandas原生操作:

方法一:拆分合并法

先分别提取Value1对应的行、构造Value2对应的行,再按原顺序交替合并:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'ID': ['ID1', 'ID2', 'ID3', 'ID4'],
    'Value1': [1.00, 2.00, 3.00, 4.00],
    'Value2': [0.12, 0.98, 0.41, 0.69]
})

# 提取Value1对应的行
df_value1 = df[['ID', 'Value1']]

# 构造Value2对应的行:ID列统一为"Value2",Value1列取原DataFrame的Value2值
df_value2 = pd.DataFrame({
    'ID': ['Value2'] * len(df),
    'Value1': df['Value2'].values
})

# 按原索引顺序交替合并两个DataFrame,reset_index重置索引
result = pd.concat([df_value1, df_value2], axis=0).sort_index(kind='mergesort').reset_index(drop=True)
print(result)

输出结果:

ID  Value1
0     ID1    1.00
1  Value2    0.12
2     ID2    2.00
3  Value2    0.98
4     ID3    3.00
5  Value2    0.41
6     ID4    4.00
7  Value2    0.69

方法二:堆叠转换法

利用stack()把列转为行,再调整列内容:

import pandas as pd

df = pd.DataFrame({
    'ID': ['ID1', 'ID2', 'ID3', 'ID4'],
    'Value1': [1.00, 2.00, 3.00, 4.00],
    'Value2': [0.12, 0.98, 0.41, 0.69]
})

# 设置ID为索引,堆叠Value1和Value2列
stacked_df = df.set_index('ID').stack().reset_index()
# 重命名列便于后续处理
stacked_df.columns = ['Original_ID', 'Col_Name', 'Value1']

# 调整ID列:如果是Value2对应的行,用Col_Name替换Original_ID
stacked_df['ID'] = stacked_df.apply(lambda row: row['Col_Name'] if row['Col_Name'] == 'Value2' else row['Original_ID'], axis=1)

# 保留需要的列并重置索引
result = stacked_df[['ID', 'Value1']].reset_index(drop=True)
print(result)

输出结果与方法一完全一致。

关键逻辑说明

两种方法核心都是将Value2的每条记录转换为独立行,且保证与对应Value1行按顺序排列:

  • 方法一拆分后合并,逻辑直观,适合新手理解;
  • 方法二利用Pandas堆叠操作,代码更简洁,适配多列类似转换场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:10:20