从 pandas .apply 过渡到矢量化方法

Transitioning from pandas .apply to a vectoriztion approach

我正在尝试使用纯矢量化方法改进 pandas 迭代。我对矢量化有点陌生,很难让它工作。

在一个数据框字段中,我找到了所有基于字符串的唯一地址记录。我需要单独搜索每个唯一地址的数据框,并为返回的记录分配一个唯一标识符。这样,无论数据帧中多次出现,我都可以为每个地址分配 1 个 UID。

我开发了一种方法,利用 pandas .apply 方法进行矢量化。

def addr_id(x):
    global df
    df['Unq_ID'][df['address'] == x] = uuid.uuid4()

pd.DataFrame(df['address'].unique(), columns=["column1"]).apply(lambda x: addr_id(x["column1"]), axis=1)

但是,我正在尝试完全取消 .apply 方法。这就是我卡住的地方。

df['Unq_ID'][df['address'] == (pd.DataFrame(df['address'].unique(), columns=["column1"]))["column1"]] = uuid.uuid4()

我不断收到 ValueError: Can only compare identically-labeled Series objects

由于性能原因,您想摆脱 Pandas 申请,对吗?

我可以建议一种不同的方法来解决您的问题吗?

您可以构造一个字典,将 column1 的唯一值作为键,将 uuid 作为值,然后将它们映射到 DataFrame:

uuid_dict = {key: uuid.uuid4() for key in df['column1'].unique()}
df['address'] = df.column1.map(uuid_dict)

这会非常快,因为它避免了在 Python 中循环(Pandas apply 在后台执行)。