为什么广播比迭代快得多?它是如何工作的?

2024-07-07 00:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,它存储名、姓和全名。他们来自不同的数据源,我通过ID将他们连接在一起。我的任务是检查名字+姓氏和全名是否表示相同的人。桌子是这样的:

   FIRST_NAME   LAST_NAME    FULL_NAME

 0   RICHARD   LEE         LEE' RICHARD

 1   MIKE      JORDAN      MICHAEL JORDAN

 2   Jack      Sparrow     Jack Catchme Sparrow

我的第一步是检查first\u name的字符串是否在full\u name的字符串中。一开始,我想做一个循环:

series = pd.Series(index = df.index)
for row in df.iterrows():
    series[row[0]] = row[1]["FIRST_NAME"] in row[1]["FULL_NAME"]

因为我有一个很长的表(数百万行),上面的代码将运行数小时。但是,当我在列中操作它们时,速度非常快:

series = df["FIRST_NAME"]+","+df["FULL_NAME"]
series = series.apply(lambda x: x.split(','))
series = series.apply(lambda x: True if x[0] in x[1] else False)

上面的两个方法都比较了两列中所有行的字符串。但是第二个节省了很多时间。是因为熊猫有广播的方法来操纵列吗?它是如何工作的?你知道吗


Tags: 字符串nameinricharddfindexfullrow