合并两个不同列上的两个数据帧并重命名其他两列。
df1
Male height
Alex 156
Philip 178
df2
Female height
Alex 144
Janice 150
我想要一个像这样的数据框
df3
Person M_Height F_Height
Alex 156 144
Philip 178 0
Janice 0 150
我如何实现这一目标?如果我说正确并且离开,Merge会分别给我两个列。
答案 0 :(得分:4)
In [21]: pd.merge(df1.rename(columns={'Male':'Person'}),
df2.rename(columns={'Female':'Person'}),
...: on='Person', how='outer', suffixes=['_M','_F']) \
...: .fillna(0)
Out[21]:
Person height_M height_F
0 Alex 156.0 144.0
1 Philip 178.0 0.0
2 Janice 0.0 150.0
答案 1 :(得分:3)
或者你可以尝试这个来修复你的代码( Merge分别给我两个列,如果我正确地说左边 )
df=df1.merge(df2,left_on='Male',right_on='Female',how='outer',suffixes=['_M','_L'])
df.assign(Person=(df[['Male','Female']].ffill(axis=1)).Female).drop(['Male','Female'],axis=1).fillna(0)
Out[890]:
height_M height_L Person
0 156.0 144.0 Alex
1 178.0 0.0 Philip
2 0.0 150.0 Janice
答案 2 :(得分:0)
第一步是将列名更改为非重叠
df1.columns = ['M_Height']
df2.columns = ['F_Height']
第二步是合并数据帧。
df = pd.merge([df1, df2], how='outer')