【问题标题】:Vectorized look-up of Pandas dataframe column values in a separate list在单独的列表中矢量化查找 Pandas 数据框列值
【发布时间】:2018-07-28 14:29:43
【问题描述】:

我正在寻找一种使用 Pandas 数据帧的内容执行计算的快速(矢量化)方法。

我的数据框每行包含 2 个标签,我想查找与每个标签对应的值(从字典/列表中)并执行计算,将结果返回到数据框中的新列。

我在下面使用循环包括我的工作示例。

label1s = np.array(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], dtype=str)
label2s = np.array(['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], dtype=str)
data = np.column_stack([label1s, label2s])

label_values = {'A':1, 'B':2, 'C':3}

df = pd.DataFrame(data=data, columns=['Label1', 'Label2'])

new_col = np.zeros_like(label1s, dtype=float)

for index, row in df.iterrows():
    val1 = label_values[row['Label1']]
    val2 = label_values[row['Label2']]
    new_col[index] = val1 - val2

df['result'] = new_col
df

但是,对于大型数据集,循环非常不受欢迎且速度很慢。

请问有办法优化吗?

我已经探索了一些 pandas 功能,例如“查找”,但这似乎需要每个大小的数组,而在我的情况下,我需要从外部列表中查找值,并且与数据框大小不同。

【问题讨论】:

    标签: python pandas dataframe optimization vectorization


    【解决方案1】:

    你可以map字典到所需的列,即

    df['result'] = df.Label1.map(label_values) - df.Label2.map(label_values)
    

    【讨论】:

    • 我提倡这种方法
    • 谢谢,与循环相比,这可以提高约 5 倍的速度。
    猜你喜欢
    • 2019-10-02
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2017-04-04
    • 2021-03-03
    • 2023-04-06
    相关资源
    最近更新 更多