在python中使用两个不同大小的数据框

时间:2018-05-23 06:38:03

标签: python-3.x pandas

我正在使用两个数据框。 样本数据如下:

DF = ['A','B','C','D','E','A','C','B','B']

DF1 = pd.DataFrame({'Team':DF})

DF2 = pd.DataFrame({'Team':['A','B','C','D','E'],'Rating':[1,2,3,4,5]})

我想向DF1添加一个新列,如下所示:

Team       Rating
A             1
B             2
C             3
D             4
E             5
A             1
C             3
B             2
B             2

如何添加新列? 我用了

DF1['Rating']= np.where(DF1['Team']== DF2['Team'],DF2['Rating'],0)

错误:ValueError:只能比较带有相同标签的Series对象 谢谢 ZEP

3 个答案:

答案 0 :(得分:2)

我认为Series需要使用map创建set_index,如果匹配得不到NaN,那么添加fillna以替换为{{1} }}:

0
DF1['Rating']= DF1['Team'].map(DF2.set_index('Team')['Rating']).fillna(0)
print (DF1)
  Team  Rating
0    A       1
1    B       2
2    C       3
3    D       4
4    E       5
5    A       1
6    C       3
7    B       2
8    B       2

<强>详细

DF = ['A','B','C','D','E','A','C','B','B', 'G']
DF1 = pd.DataFrame({'Team':DF})

DF2 = pd.DataFrame({'Team':['A','B','C','D','E'],'Rating':[1,2,3,4,5]})

DF1['Rating']= DF1['Team'].map(DF2.set_index('Team')['Rating']).fillna(0)
print (DF1)
  Team  Rating
0    A     1.0
1    B     2.0
2    C     3.0
3    D     4.0
4    E     5.0
5    A     1.0
6    C     3.0
7    B     2.0
8    B     2.0
9    G     0.0 <- G not in DF2['Team']

答案 1 :(得分:1)

您可以使用:

print (DF1['Team'].map(DF2.set_index('Team')['Rating']))
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
5    1.0
6    3.0
7    2.0
8    2.0
9    NaN
Name: Team, dtype: float64

答案 2 :(得分:1)

我认为你可以使用pd.merge

DF1=pd.merge(DF1,DF2,how='left',on='Team')
DF1

  Team Rating
0   A   1
1   B   2
2   C   3
3   D   4
4   E   5
5   A   1
6   C   3
7   B   2
8   B   2