2016-04-04 73 views
5

Tôi có hai dataframes, người đầu tiên có 1.000 dòng và trông giống như:thay thế các giá trị cột trong một dataframe bởi giá trị của dataframe khác

Date   Group   Family  Bonus 
2011-06-09  tri23_1  Laavin  456 
2011-07-09  hsgç_T2  Grendy  679 
2011-09-10  bbbj-1Y_jn Fantol  431 
2011-11-02  hsgç_T2  Gondow  569 

Cột Group có giá trị khác nhau, đôi khi lặp đi lặp lại, nhưng nhìn chung về 50 giá trị duy nhất.

Các dataframe thứ hai chứa tất cả những 50 giá trị duy nhất (50 dòng) và cũng là khách sạn, có liên quan đến các giá trị:

Group    Hotel 
tri23_1   Jamel 
hsgç_T2   Frank 
bbbj-1Y_jn  Luxy 
mlkl_781   Grand Hotel 
vchs_94   Vancouver 

Mục tiêu của tôi là để thay thế các giá trị trong cột Group những người đầu tiên dataframe theo các giá trị tương ứng của cột Hotel của khung dữ liệu thứ hai/hoặc tạo cột Hotel với các giá trị tương ứng. Khi tôi cố gắng để làm cho nó chỉ bằng cách chuyển nhượng như

df1.loc[(df1.Group=df2.Group), 'Hotel']=df2.Hotel 

Tôi có một lỗi mà các dataframes không kích thước bằng nhau, vì vậy việc so sánh là không thể

Trả lời

9

Nếu bạn đặt chỉ số cho 'Nhóm' cột bên kia df sau đó bạn có thể thay thế bằng map trên df ban đầu của bạn 'Nhóm' cột:

In [36]: 
df['Group'] = df['Group'].map(df1.set_index('Group')['Hotel']) 
df 

Out[36]: 
     Date Group Family Bonus 
0 2011-06-09 Jamel Laavin 456 
1 2011-07-09 Frank Grendy 679 
2 2011-09-10 Luxy Fantol 431 
3 2011-11-02 Frank Gondow 569 
+0

khi tôi làm điều này, tôi nhận được một thông báo lỗi, bất kỳ ý tưởng tại sao? InvalidIndexError: Reindexing chỉ hợp lệ với các đối tượng Index có giá trị duy nhất – mkheifetz

+1

Nếu bạn không có các giá trị duy nhất trong cột của mình thì bạn không thể đặt chỉ mục thành nó – EdChum

+0

hmmm, vì vậy tôi nên làm gì nếu tôi có một dataframe lớn mà tôi muốn tất cả các cột (các cột không phải là duy nhất như bạn vừa tự tuyên bố) để nhận các giá trị tương ứng với các giá trị trong một cột trong một khung dữ liệu khác? – mkheifetz

0

bạn cũng có thể tạo ra một từ điển và sử dụng được áp dụng:

hotel_dict = df2.set_index('Group').to_dict() 
df1['Group'] = df1['Group'].apply(lambda x: hotel_dict[x]) 
Các vấn đề liên quan