Pandas如何将DataFrame每两行合并为独立列 相同x/y行合并生成u/v列
pandas 同坐标行拆分为u、v列实现方案
如果你的数据中每个(x,y)坐标对固定对应2条data记录,需要将两条记录分别映射为u、v列,可直接用以下方法实现:
方法1:通用鲁棒方案(不依赖原始行顺序)
通过分组标记+透视的方式实现,哪怕同坐标的两行在原始表中不相邻也能正确匹配:
import pandas as pd # 1. 给每个相同x、y分组内的行按顺序打标记,第一条标记为0,第二条标记为1 df['row_tag'] = df.groupby(['x', 'y']).cumcount() # 2. 按标记把data列拆分为u、v两列 df_result = df.pivot(index=['x', 'y'], columns='row_tag', values='data').reset_index() # 3. 重命名列得到最终结果 df_result.columns = ['x', 'y', 'u', 'v']
运行后输出结果和示例预期完全一致:
| x | y | u | v |
|---|---|---|---|
| 1 | 1 | 0.2 | 0.5 |
| 1 | 2 | 0.7 | 0.2 |
方法2:快速切片方案(仅适用于严格有序数据)
如果你的原始数据严格按照「同x、y的两行连续排列」的规则存储,没有乱序、没有缺失/多余记录,可以直接用步长切片实现,性能更高:
df_result = pd.DataFrame({ 'x': df['x'].iloc[::2].values, 'y': df['y'].iloc[::2].values, 'u': df['data'].iloc[::2].values, 'v': df['data'].iloc[1::2].values })
异常排查
如果运行后u或v列出现空值,说明存在部分(x,y)坐标对应的记录数不是2条,可运行以下代码检查异常数据:
# 统计每个坐标对应的记录条数 print(df.groupby(['x', 'y']).size())
内容的提问来源于stack exchange,提问作者James Hall
相关产品推荐
相关产品推荐

