有没有人知道是否可以用更快的东西替换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。我想应用此函数来创建一个“类似”的列,如下所示:
我可以轻松地使用双循环,但我希望以更低的复杂度更快地完成此任务。
感谢您的帮助! :)
答案 0 :(得分:1)
基本上,您希望找到具有重复项的col组合,并在“类似”列中将其标记为1
。 pandas.DataFrame.duplicated
就是这样做的,你只需这样做:
df.duplicated(keep=False)
请参阅https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.duplicated.html#pandas.DataFrame.duplicated,keep=False
会将所有重复标记为True
。
然后你只需要将boolean转换为int:
df['similar'] = list(map(int, df.duplicated(keep=False)))