Pandas 合并 DataFrame 避免重复列
在使用 Pandas 的 merge 函数合并 DataFrame 时,如果两个 DataFrame 中存在相同的列名,合并后的 DataFrame 会出现重复的列名,例如 _x 和 _y。为了避免这种情况,可以使用 suffixes 参数来指定重复列的后缀。
例如,以下代码演示了如何使用 suffixes 参数来避免重复列:
# 创建两个 DataFrame
import pandas as pd
data1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
data2 = pd.DataFrame({'A': [1, 2, 3], 'C': [7, 8, 9]})
# 合并 DataFrame,指定 suffixes 参数
data = data1.merge(data2, on='A', how='left', suffixes=('_data1', '_data2'))
# 打印合并后的 DataFrame
print(data)
输出结果:
A B_data1 C_data2
0 1 4 7
1 2 5 8
2 3 6 9
可以看到,合并后的 DataFrame 中,重复的列名分别添加了 _data1 和 _data2 后缀。
在本文的例子中,我们可以使用 suffixes 参数来避免重复列:
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', suffixes=('_minA', '_minD'))
data = data.merge(group_minD, on=['TrainIndex', 'seq_min'], how='left', suffixes=('_minD', '_maxA'))
data = data.merge(group_maxA, on=['TrainIndex', 'seq_max'], how='left', suffixes=('_maxA', '_maxD'))
data = data.merge(group_maxD, on=['TrainIndex', 'seq_max'], how='left', suffixes=('_maxD', '_'))
这样,合并后的 DataFrame 中就不会出现重复列了。
希望这篇内容能够帮助你解决问题。
原文地址: https://www.cveoy.top/t/topic/nBeu 著作权归作者所有。请勿转载和采集!