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.

2
2019-05-08 16: 16: 24Z
  1. + 1 từ tôi, bạn đã đánh bại câu trả lời của tôi khoảng 6 lần để chạy! Global_Data['Col_Keys'] cho tôi, List_Data['Key'] cho bạn về dữ liệu được cung cấp
    2019-05-08 16: 24: 45Z
  2. cảm ơn bạn Valentino cả hai đều rất nhanh hơn mã của tôi
    2019-05-08 16: 25: 01Z
, tham chiếu /api /pandas.DataFrame.merge.html "rel =" nofollow noreferrer "> hợp nhất hoạt động. KeyError

Lưu ý rằng bản chất của điều này là 2.94 ms, nhưng các hoạt động bổ sung là để giữ chỉ mục ban đầu và xóa các cột bổ sung không mong muốn. Tôi khuyến khích bạn thử từng bước riêng lẻ để xem kết quả.

    
3
2019-05-08 16: 20: 17Z
565 µs
nguồn đặt đây