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

