第一个数据帧:(名称只有名字)
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中获取,就像在所需数据框中一样。
有人可以帮我吗?谢谢
答案 0 :(得分:1)
首先将参数suffixes
添加到merge
,然后将Series.fillna
与DataFrame.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'))