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

如何将oked_2列数据转移到oked_1列且保留其余列数据不变?

实现思路与代码示例

核心逻辑是:

  • 新oked_1列取值由「原始oked_1的首个值」+「全部oked_2的值」拼接而成
  • 新oked_2列取值由「全部原始oked_2的值」+「原始oked_2的最后一个值」拼接而成
  • 其余列所有行取值和原始数据首行保持一致,按新数据的行数重复即可

如果你当前数据集里所有非oked_1/oked_2的列取值完全一致,可直接使用下面的代码:

import pandas as pd

# 假设你的原始DataFrame名为df
# 构造新的oked_1、oked_2序列
new_oked1 = [df['oked_1'].iloc[0]] + df['oked_2'].tolist()
new_oked2 = df['oked_2'].tolist() + [df['oked_2'].iloc[-1]]

# 复制其他列的值,重复对应次数
new_df = df.drop(['oked_1', 'oked_2'], axis=1).iloc[[0]*len(new_oked1)].reset_index(drop=True)

# 拼接新的两列
new_df['oked_1'] = new_oked1
new_df['oked_2'] = new_oked2

如果你的数据存在多个分组(比如不同id、不同date对应不同的oked取值),可以按分组批量处理:

def process_single_group(group):
    # 单组内的处理逻辑和上述一致
    new_oked1 = [group['oked_1'].iloc[0]] + group['oked_2'].tolist()
    new_oked2 = group['oked_2'].tolist() + [group['oked_2'].iloc[-1]]
    res = group.drop(['oked_1', 'oked_2'], axis=1).iloc[[0]*len(new_oked1)].reset_index(drop=True)
    res['oked_1'] = new_oked1
    res['oked_2'] = new_oked2
    return res

# 按非oked列分组处理,可根据你的实际业务调整分组字段
new_df = df.groupby(['id', 'date', 'KPS', 'address', 'type'], as_index=False).apply(process_single_group).reset_index(drop=True)

运行后new_df就是你需要的结果,你可以自行比对值是否符合预期。

内容的提问来源于stack exchange,提问作者Uldana Duisenaly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:18:02