【问题标题】:vectorizing nested for loops - pandas矢量化嵌套 for 循环 - 熊猫
【发布时间】:2015-11-01 21:49:53
【问题描述】:

我有一个案例,将来自“外部”for 循环的多个属性与来自“内部”for 循环的多个属性进行比较。

两个循环都在 pandas 数据帧上,稍微阅读一下,使用 iterrows() 进行此类工作通常会很慢。

以下是如何/为什么使用这个嵌套 for 循环的指示。速度很慢。

for key1, values1 in dataframe_1.iterrows():        

    for key2, values2 in dataframe_2.iterrows():

        if values2['a'] > values1['a'] and value2['b'] == values1['b']:
            # do something, such as append to a combined df

有没有更合适的方法来对 pandas 数据框执行此类嵌套比较?不同的数据类型(即字典)是更好的起点吗?

【问题讨论】:

  • 将一个 DataFrame 的每一行与另一个 DataFrame 的每一行进行比较本来就很慢,因为这是一个 O(m*n) 操作。这个过程的目标是什么?您真的需要将每一行与其他每一行进行比较吗?
  • 使用numpy 可能会受益?

标签: python performance for-loop pandas vectorization


【解决方案1】:

您根本不需要在 pandas 中应用 for 循环或 iterrows()

for i in ((d2['a'] > d1['a']) & (d2['b'] == d1['b'])):
    # do something
    print i

根据要处理的值,您可以更改行:

(d2['a'] > d1['a']) & (d2['b'] == d1['b'])

获取进行某些操作所需的数据。

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多