我们如何合并两个数据帧而不会丢失python中的任何行

时间:2017-03-08 17:57:08

标签: python python-2.7 python-3.x pandas

我有两个数据框如下。

DF1:

Student_Name,total
X,400
Y,350
D,450
E,420

DF2:

Student_Name,jan
X,350               
Y,380
A,360
B,370
Y,380

输出:

Student_Name,jan,feb
X,350,400               
Y,380,350
A,360,0
B,370,0
Y,380,350

输出应该没有。来自df2的行和来自df1的值。如果在df1中找不到df2行标签那么应该有0.如果df2索引列有重复。例如,这里Y是两次,两次我们从df1获取它的值。也输出不应该有不在df2但在df1中的行。这里D和E在df1但不在df2中,因此不包括在输出数据帧中。

1 个答案:

答案 0 :(得分:0)

您可以使用pd.merge()方法:

In [38]: pd.merge(df1, df2, on='Student_Name', how='left').fillna(0)
Out[38]:
  Student_Name  total    jan
0            X    400  350.0
1            Y    350  380.0
2            Y    350  380.0
3            D    450    0.0
4            E    420    0.0

或:

In [39]: pd.merge(df1, df2, on='Student_Name', how='right').fillna(0)
Out[39]:
  Student_Name  total  jan
0            X  400.0  350
1            Y  350.0  380
2            Y  350.0  380
3            A    0.0  360
4            B    0.0  370

如果您只需要加入一列,那么使用.map()方法可能会更快:

In [47]: df2['new'] = df2.Student_Name.map(df1.set_index('Student_Name')['total']) \
                         .fillna(0).astype(int)

In [48]: df2
Out[48]:
  Student_Name  jan  new
0            X  350  400
1            Y  380  350
2            A  360    0
3            B  370    0
4            Y  380  350