首页 > 解决方案 > 外连接从右边添加缺失值作为零或 NaN

问题描述

我正在尝试以一种非常具体的方式合并两个 PANDAS df。

DF1 =

Name    Color
Tom     Blue
Frank   Red
John    Green
Sarah   Red

DF2 =

Name    Shape   Value
Tom     Circle      4
Tom     Square      4
Frank   Triangle    7
John    Square      2
Sarah   Circle      1

期望的结果 = DFM =

Name    Color   Shape   Value
Tom     Blue    Circle      4
Frank   Red     Circle      0
John    Green   Circle      0
Sarah   Red     Circle      1
Tom     Blue    Square      4
Frank   Red     Square      0
John    Green   Square      2
Sarah   Red     Square      0
Tom     Blue    Triangle    0
Frank   Red     Triangle    7
John    Green   Triangle    0
Sarah   Red     Triangle    0

外连接给了我我想要的大部分东西,但不是零。寻找有关执行此操作的优雅方式的一些见解。零或简单的 NaN 很好,因为我可以用零替换 NaN。

标签: pythonpandasmergeouter-join

解决方案


你可以merge使用unstack

s=df2.merge(df1,on='Name',how='outer')
s.set_index(['Name','Color','Shape']).Value.unstack(-1,fill_value=0).stack().reset_index().sort_values(['Shape','Name'])
Out[263]: 
     Name  Color     Shape  0
0   Frank    Red    Circle  0
3    John  Green    Circle  0
6   Sarah    Red    Circle  1
9     Tom   Blue    Circle  4
1   Frank    Red    Square  0
4    John  Green    Square  2
7   Sarah    Red    Square  0
10    Tom   Blue    Square  4
2   Frank    Red  Triangle  7
5    John  Green  Triangle  0
8   Sarah    Red  Triangle  0
11    Tom   Blue  Triangle  0

推荐阅读