เมื่อมี Panda DataFrame เช่นนี้:
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
แต่มีประมาณ 100,000 รายการฉันกำลังมองหาการเพิ่มและการลบของรายการเหล่านั้นในสองคอลัมน์ในแถวที่ชาญฉลาด
มันเปรียบได้กับคำถามนี้: Pandas: วิธีเปรียบเทียบคอลัมน์ของรายการ Row-wise ใน DataFrame กับ Pandas (ไม่ใช่สำหรับลูป) แต่ฉันกำลังมองหาความแตกต่างและPandas.apply
วิธีการดูเหมือนจะไม่เร็วขนาดนั้นสำหรับหลาย ๆ รายการ นี่คือรหัสที่ฉันกำลังใช้อยู่ Pandas.apply
ด้วยnumpy's setdiff1d
วิธีการ:
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)
ใช้งานได้ดี แต่ใช้เวลาประมาณ 120,000 รายการในหนึ่งนาที ดังนั้นจึงมีวิธีที่เร็วกว่าในการบรรลุเป้าหมายนี้หรือไม่?