You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的Pandas DataFrame中实现值的移位操作?

实现需求的解决方案

你想要把每个重复ID组的第二行ID替换为下一个唯一ID,同时保留原value,形成衔接式的结果。这里提供两种实现思路,兼顾直观性和高效性:

方法一:循环处理(逻辑清晰易理解)

这种方式逐个处理每个ID组,适合快速理解需求逻辑:

import pandas as pd

# 原始数据
d = {'ID': ["A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F"], 'value': [23, 23, 52, 52, 36, 36, 46, 46, 9, 9, 110, 110]}
df = pd.DataFrame(data=d)

# 获取所有唯一ID列表
unique_ids = df['ID'].unique()

# 初始化结果DataFrame
result = pd.DataFrame(columns=df.columns)

# 遍历每个ID(跳过最后一个,因为它没有后续ID)
for i in range(len(unique_ids)-1):
    current_id = unique_ids[i]
    next_id = unique_ids[i+1]
    # 提取当前ID的两行数据
    current_group = df[df['ID'] == current_id]
    # 添加第一行(保持原样)
    result = pd.concat([result, current_group.iloc[[0]]])
    # 修改第二行的ID为下一个ID后添加
    modified_row = current_group.iloc[[1]].copy()
    modified_row['ID'] = next_id
    result = pd.concat([result, modified_row])

# 重置索引
result = result.reset_index(drop=True)
print(result)

方法二:向量化操作(高效简洁,适合大数据集)

利用Pandas的向量化特性避免循环,处理大规模数据时性能更优:

import pandas as pd

# 原始数据
d = {'ID': ["A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "F", "F"], 'value': [23, 23, 52, 52, 36, 36, 46, 46, 9, 9, 110, 110]}
df = pd.DataFrame(data=d)

# 获取所有唯一ID列表
unique_ids = df['ID'].unique()

# 创建映射关系:当前ID → 下一个ID
id_mapping = dict(zip(unique_ids[:-1], unique_ids[1:]))

# 复制原始数据作为结果基础
result = df.copy()

# 定位每个ID组的第二行(奇数索引行)
odd_rows_mask = result.index % 2 == 1

# 替换奇数行的ID
result.loc[odd_rows_mask, 'ID'] = result.loc[odd_rows_mask, 'ID'].map(id_mapping)

# 移除最后两行(F没有后续ID,目标结果中也无此部分)
result = result.iloc[:-2].reset_index(drop=True)
print(result)

最终输出结果

两种方法都会生成你期望的DataFrame:

ID  value
0  A     23
1  B     23
2  B     52
3  C     52
4  C     36
5  D     36
6  D     46
7  E     46
8  E      9
9  F      9

核心逻辑说明

  • 每个ID的第一行数据保持完全不变
  • 每个ID的第二行仅替换ID为下一个唯一ID,value保留原数值
  • 最后移除无后续ID的F组数据,匹配你给出的目标结果格式

内容的提问来源于stack exchange,提问作者Jiayu Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:39:26