合并不同列上的两个数据帧

时间:2017-08-07 17:54:17

标签: python pandas numpy

合并两个不同列上的两个数据帧并重命名其他两列。

 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会分别给我两个列。

3 个答案:

答案 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')