gpt4 book ai didi

python - 有效地逐行比较两列中的列表

转载 作者:行者123 更新时间:2023-12-04 11:10:01 25 4
gpt4 key购买 nike

当有这样的 Pandas 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: How to Compare Columns of Lists Row-wise in a DataFrame with Pandas (not for loop)?但我正在寻找差异,和 Pandas.apply对于这么多条目,方法似乎没有那么快。
这是我目前使用的代码。 Pandas.applynumpy'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 个条目需要大约一分钟。那么有没有更快的方法来实现这一点?

最佳答案

不确定性能,但由于缺乏更好的解决方案,这可能适用:

temp = df[['today', 'yesterday']].applymap(set)
removals = temp.diff(periods=1, axis=1).dropna(axis=1)
additions = temp.diff(periods=-1, axis=1).dropna(axis=1)

移除:
  yesterday
0 {}
1 {}
2 {a}

补充:
  today
0 {c}
1 {b}
2 {b}

关于python - 有效地逐行比较两列中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59652882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com