如何使用pandas对dataframe进行透视转换得到目标结构
Pandas数据框转换实现方案
核心思路通过长宽表转换两步实现,先熔解原宽表为长格式过滤空值,再透视为目标宽格式即可。
首先构造测试用的原始df1(可直接跳过这步用你自己的df1):
import pandas as pd import numpy as np df1 = pd.DataFrame({ 'Num': ['P1', 'P2', 'P3'], 'B1': ['V1', 'V1', np.nan], 'B2': ['V2', np.nan, 'V2'], 'B3': [np.nan, 'V2', np.nan], 'B4': [np.nan, np.nan, 'V1'] })
核心转换代码:
# 转长表,保留Num、B列名、对应值三个字段,删除空值行 df_long = df1.melt(id_vars='Num', var_name='b_column', value_name='v_value').dropna() # 长表转目标宽表 df2 = df_long.pivot(index='v_value', columns='Num', values='b_column').reset_index().rename_axis(columns=None) # 可选:和示例输出完全对齐,把第一列列名设为空 df2 = df2.rename(columns={'v_value': ''})
执行print(df2)即可得到你需要的结果:
P1 P2 P3 0 V1 B1 B1 B4 1 V2 B2 B3 B2
内容的提问来源于stack exchange,提问作者Kzodo
相关产品推荐
相关产品推荐

