Khi có một DataFrame như thế này:
import pandas as pd
import numpy as np
df = pd.DataFrame({'today': [['a', 'b', 'c'], ['a', 'b'], ['b']],
'yesterday': [['a', 'b'], ['a'], ['a']]})
today yesterday
0 ['a', 'b', 'c'] ['a', 'b']
1 ['a', 'b'] ['a']
2 ['b'] ['a']
... etc
Nhưng với khoảng 100 000 mục, tôi đang tìm kiếm các bổ sung và loại bỏ các danh sách đó trong hai cột trên cơ sở hàng khôn ngoan.
Nó có thể so sánh với câu hỏi này: Pandas: Làm thế nào để so sánh các cột của danh sách Row-khôn ngoan trong DataFrame với Pandas (không phải cho vòng lặp)? nhưng tôi đang xem xét sự khác biệt và Pandas.apply
phương pháp dường như không nhanh cho nhiều mục như vậy. Đây là mã mà tôi hiện đang sử dụng. Pandas.apply
với numpy's setdiff1d
phương pháp:
additions = df.apply(lambda row: np.setdiff1d(row.today, row.yesterday), axis=1)
removals = df.apply(lambda row: np.setdiff1d(row.yesterday, row.today), axis=1)
Điều này hoạt động tốt, tuy nhiên phải mất khoảng một phút cho 120 000 mục. Vì vậy, có một cách nhanh hơn để thực hiện điều này?