我有两个数据框如下。
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中,因此不包括在输出数据帧中。
答案 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