用apply替换双循环python

时间:2017-08-10 10:47:48

标签: python-3.x for-loop duplicates apply

有没有人知道是否可以用更快的东西替换python中的双循环,比如apply函数? 例如,我有这个数据框:

df = pd.DataFrame()
df["col_1"] = ["hello", "salut","hello", "bye", "bye","hi","hello", "hello"]
df["col_2"] = ["dog", "dog", "dog", "cat", "cat", "mouse","dog","cat"]
df["col_3"] = [100,45,100,51,51,32,100,85]

和这个功能:

def f (l1, l2): if list(l1) == list(l2) : return 1 else: return 0

如果2个列表相同则返回1,否则返回0。我想应用此函数来创建一个“类似”的列,如下所示:enter image description here

我可以轻松地使用双循环,但我希望以更低的复杂度更快地完成此任务。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

基本上,您希望找到具有重复项的col组合,并在“类似”列中将其标记为1pandas.DataFrame.duplicated就是这样做的,你只需这样做:

df.duplicated(keep=False) 

请参阅https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.duplicated.html#pandas.DataFrame.duplicatedkeep=False会将所有重复标记为True

然后你只需要将boolean转换为int:

df['similar'] = list(map(int, df.duplicated(keep=False)))