Je travaille avec deux trames de données. Les exemples de données sont les suivants:

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]})

Je veux ajouter une nouvelle colonne à DF1 comme suit:

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

Comment puis-je ajouter une nouvelle colonne? j'ai utilisé

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

Erreur: ValueError: ne peut comparer que des objets Series portant le même libellé Merci ZEP

2
Zephyr 23 mai 2018 à 09:38

3 réponses

Meilleure réponse

Je pense que j'ai besoin de map par Series créé avec {{X2} } et s'il ne correspond pas à get NaN s, donc fillna a été ajouté pour être remplacé par 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']

Détail :

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
jezrael 23 mai 2018 à 06:42

Je pense que vous pouvez utiliser 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
1
宋殊同 23 mai 2018 à 07:13

Vous pouvez utiliser:

In [54]: DF1['new_col'] = DF1.Team.map(DF2.set_index('Team').Rating)

In [55]: DF1
Out[55]: 
  Team  new_col
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
1
llllllllll 23 mai 2018 à 06:42