2 Câu hỏi: Làm cách nào tôi có thể sao chép nhanh các giá trị từ một khung dữ liệu này sang khung dữ liệu khác

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi muốn tạo trên Dataframe của mình (Global_Dataset) một cột mới (Col_val) dựa trên Dataframe khác (List_Data). Tôi cần mã nhanh hơn vì tôi có bộ dữ liệu gồm 2 triệu mẫu và List_data chứa 50000 mẫu.

Col_Val phải chứa giá trị của cột Giá trị theo Col_Key

List_Data:

id     Key     Value
1       5        0
2       7        1
3       9        2

Global_Dataset:

id    Col_Key     Col_Val
1        9           2
2        5           0
3        9           2 
4        7           1
5        7           1
6        5           0
7        9           2
8        7           1
9        9           2
10       5           0

Tôi đã thử mã này nhưng nó cần một thời gian dài để được thực thi. Có cách nào nhanh hơn để đạt được mục tiêu của tôi không?

Col_Val = []
for i in range (len(List_Data)):
    for j in range (len(Global_Data)):
        if List_Data.get_value(i, "Key") == Global_Data.get_value(j, 'Col_Key') :
            Col_Val.append(List_Data.get_value(i, 'Value'))

Global_Data['Col_Val'] = Col_Val

PS: Tôi đã thử loc và iloc thay vì get_value nhưng nó hoạt động rất chậm

    
1
2 Câu trả lời                              2                         

Hãy thử điều này:

data_dict = {key : value for key, value in zip(List_Data['Key'], List_Data['Value'])}
Global_Data['Col_Val'] = pd.Series([data_dict[key] for key in Global_Data['Col_Key']])

Tôi không biết sẽ mất bao lâu trên máy của bạn với lượng dữ liệu bạn cần xử lý, nhưng nó sẽ nhanh hơn những gì bạn đang sử dụng bây giờ.
Bạn cũng có thể tạo từ điển với data_dict = {row['Key'] : row['Value'] for _, row in list_data.iterrows()} nhưng trên máy của tôi chậm hơn so với những gì tôi đề xuất ở trên.

nguồn đặt đây