Python中如何将DataFrame分类行转列 按位置聚合各节点信号强度
实现思路
每个节点同一位置下有4条有序记录,我们先给NODE + LOCATION的分组内添加顺序编号,再通过透视表转成宽表即可完全保留原有顺序。
完整代码
import pandas as pd # 1. 给同节点同位置的记录按原顺序添加编号 df['group_seq'] = df.groupby(['NODE', 'LOCATION']).cumcount() # 2. 透视转换为宽表 wide_df = df.pivot( index=['LOCATION', 'group_seq'], columns='NODE', values='SIGNAL-STRENGTH' ).reset_index() # 3. 重命名列、调整输出格式 wide_df.columns = ['LOCATION', 'group_seq', 'NODEA_SIGNAL', 'NODE_B_SIGNAL', 'NODE_C_SIGNAL', 'NODE_D_SIGNAL', 'NODE_E_SIGNAL'] final_df = wide_df.drop('group_seq', axis=1).reset_index(drop=True)
逻辑说明
groupby.cumcount()不会打乱原数据顺序,刚好给每个位置下同一节点的4条记录生成0-3的序号,保证后续拼接顺序和原始数据完全一致- 透视表使用
LOCATION + group_seq作为联合索引,最终生成的行数刚好是5个位置×每个位置4条=20行,完全符合需求 - 如果节点数量不固定,可通过遍历
wide_df.columns批量生成列名,不用手动写死
内容的提问来源于stack exchange,提问作者GV-9wj
相关产品推荐
相关产品推荐

