如何将带压缩列行名的DataFrame与展开DataFrame关联拆分值列
实现方法
方法1:关联合并实现(符合要求的关联操作)
核心思路是先把压缩表按不同列名拆分为独立的映射表,再分别和展开表做左连接匹配:
import pandas as pd # 拆分压缩表生成col1、col2的独立映射表 col1_mapping = packed_df[packed_df['column_name'] == 'col1'][['row_name', 'value']].rename( columns={'row_name': 'col1', 'value': 'value_col1'} ) col2_mapping = packed_df[packed_df['column_name'] == 'col2'][['row_name', 'value']].rename( columns={'row_name': 'col2', 'value': 'value_col2'} ) # 两次左连接完成值匹配 result_df = unpacked_df.merge(col1_mapping, on='col1', how='left')\ .merge(col2_mapping, on='col2', how='left')
运行后得到的result_df就是你需要的结果。
方法2:字典映射实现(性能更优,适合大数据量场景)
如果不想用多次关联,可以先把压缩表转为字典映射,直接匹配赋值:
# 生成列值到value的映射字典 value_dict = packed_df.groupby('column_name').apply( lambda x: dict(zip(x['row_name'], x['value'])) ).to_dict() # 直接为展开表新增两列 unpacked_df['value_col1'] = unpacked_df['col1'].map(value_dict['col1']) unpacked_df['value_col2'] = unpacked_df['col2'].map(value_dict['col2'])
内容的提问来源于stack exchange,提问作者AlSub
相关产品推荐
相关产品推荐

