如何将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
相关产品推荐
相关产品推荐

