Работа с двумя фреймами данных с разным размером в Python - PullRequest
0 голосов
/ 23 мая 2018

Я работаю с двумя фреймами данных.Ниже приведены примеры данных:

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 голосов
/ 23 мая 2018

Вы можете использовать:

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
0 голосов
/ 23 мая 2018

я думаю, что вы можете использовать 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
0 голосов
/ 23 мая 2018

Я думаю, нужно map от Series, созданного с помощью set_index, и, если не совпадает, получить NaN с, поэтому fillna был добавлен для замены на 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']

Деталь :

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...