在熊猫中合并两个数据框,并在合并后将column_x与column_y合并

时间:2019-12-12 13:18:54

标签: python pandas dataframe merge

第一个数据帧:(名称只有名字)

df_Math
Date        RollNo  Name    Math_Score
2019-01-01  1       A       45
2019-01-01  2       B       60
2019-02-01  1       A       70

第二个数据框:(名称包含姓氏和名字)

df_Science
Date        RollNo  Name    Science_Score
2019-01-01  1       A A     50
2019-01-01  3       C C     80
2019-02-01  2       B B     90

所需的数据框:

Date        RollNo  Name    Science_Score   Math_Score
2019-01-01      1   A       50              45
2019-01-01      2   B       NaN             60
2019-01-01      3   C C     80              NaN
2019-02-01      1   A       NaN             70
2019-02-01      2   B B     90              NaN

合并语句:df_Math.merge(df_Science, on=['Date', 'RollNo'], how='outer')给出结果,但其中包含Name_x和Name_y。我只希望它应该从df_Math中获取一个Name列,如果是NaN,则应该从df_Science中获取,就像在所需数据框中一样。

有人可以帮我吗?谢谢

2 个答案:

答案 0 :(得分:1)

首先将参数suffixes添加到merge,然后将Series.fillnaDataFrame.pop一起用于提取列Name_

df = df_Math.merge(df_Science, on=['Date', 'RollNo'], how='outer', suffixes=('','_'))
df['Name'] = df['Name'].fillna(df.pop('Name_'))
print (df)
         Date  RollNo Name  Math_Score  Science_Score
0  2019-01-01       1    A        45.0           50.0
1  2019-01-01       2    B        60.0            NaN
2  2019-02-01       1    A        70.0            NaN
3  2019-01-01       3  C C         NaN           80.0
4  2019-02-01       2  B B         NaN           90.0

答案 1 :(得分:0)

您应该检查该线程-

Pandas Merge - How to avoid duplicating columns

使用合并后缀-

df_Math.merge(df_Science, left_index=True, right_index=True, how='outer', suffixes=('','_y'))