从 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 在后台执行)。
我正在尝试使用纯矢量化方法改进 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 在后台执行)。