在使用 Pandas 合并数据时,可能会出现重复列,导致结果中出现 '_x' 和 '_y' 后缀。这是因为 Pandas 默认情况下会保留所有列,即使它们在两个 DataFrame 中都存在。为了避免这种情况,可以在 merge 时指定要保留的列。

原始代码:

group_minA = data.groupby(['TrainIndex', 'Via_Seq'])['Arrive_TmS'].min().reset_index().rename(columns={'Arrive_TmS': 'FirstSArrive_TmS', 'Via_Seq': 'seq_min'})
group_minD = data.groupby(['TrainIndex', 'Via_Seq'])['Deptr_TmS'].min().reset_index().rename(columns={'Deptr_TmS': 'FirstSDeptr_TmS', 'Via_Seq': 'seq_min'})

group_maxA = data.groupby(['TrainIndex', 'Via_Seq'])['Arrive_TmS'].max().reset_index().rename(columns={'Arrive_TmS': 'LastSArrive_TmS', 'Via_Seq': 'seq_max'})
group_maxD = data.groupby(['TrainIndex', 'Via_Seq'])['Deptr_TmS'].max().reset_index().rename(columns={'Deptr_TmS': 'LastSDeptr_TmS', 'Via_Seq': 'seq_max'})

data = data.merge(group_minA, on=['TrainIndex', 'seq_min'], how='left')
data = data.merge(group_minD, on=['TrainIndex', 'seq_min'], how='left')
data = data.merge(group_maxA, on=['TrainIndex', 'seq_max'], how='left')
data = data.merge(group_maxD, on=['TrainIndex', 'seq_max'], how='left')

修改后的代码:

group_minA = data.groupby(['TrainIndex', 'Via_Seq'])['Arrive_TmS'].min().reset_index().rename(columns={'Arrive_TmS': 'FirstSArrive_TmS', 'Via_Seq': 'seq_min'})
group_minD = data.groupby(['TrainIndex', 'Via_Seq'])['Deptr_TmS'].min().reset_index().rename(columns={'Deptr_TmS': 'FirstSDeptr_TmS', 'Via_Seq': 'seq_min'})

group_maxA = data.groupby(['TrainIndex', 'Via_Seq'])['Arrive_TmS'].max().reset_index().rename(columns={'Arrive_TmS': 'LastSArrive_TmS', 'Via_Seq': 'seq_max'})
group_maxD = data.groupby(['TrainIndex', 'Via_Seq'])['Deptr_TmS'].max().reset_index().rename(columns={'Deptr_TmS': 'LastSDeptr_TmS', 'Via_Seq': 'seq_max'})

data = data.merge(group_minA[['TrainIndex', 'seq_min', 'FirstSArrive_TmS']], on=['TrainIndex', 'seq_min'], how='left')
data = data.merge(group_minD[['TrainIndex', 'seq_min', 'FirstSDeptr_TmS']], on=['TrainIndex', 'seq_min'], how='left')
data = data.merge(group_maxA[['TrainIndex', 'seq_max', 'LastSArrive_TmS']], on=['TrainIndex', 'seq_max'], how='left')
data = data.merge(group_maxD[['TrainIndex', 'seq_max', 'LastSDeptr_TmS']], on=['TrainIndex', 'seq_max'], how='left')

在 merge 时,保留 TrainIndex、seq_min/seq_max 和要合并的列,这样就避免了出现重复列。

Pandas 合并数据避免重复列 - 解决_x,_y问题

原文地址: https://www.cveoy.top/t/topic/nBeB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录