【问题标题】:How to improve performance? Working with pandas如何提高性能?与熊猫一起工作
【发布时间】:2021-05-11 11:44:18
【问题描述】:

我希望加快我的代码速度。我曾尝试研究矢量化和应用等。但我不确定如何在我的代码中实现它。希望有人可以帮助我。

for j in df.col1.unique(): #this is the big problem
    temp = df.col2[df.col1 == j]

    for k in range(1,len(temp)+1):
        colName = 'col2' + str(k)
        value = temp.iloc[k-1]
        df.loc[df.col1 == j, [colName]] = value

如果对代码有任何疑问,请告诉我。

【问题讨论】:

    标签: performance loops for-loop vectorization apply


    【解决方案1】:

    由于像df.col1 == jdf.col1 == j 这样的表达式在整个数据帧上迭代可能需要很长时间,因此当前代码具有二次复杂度。解决方案是使用 groupby。这是一个未经测试的示例:

    groupedDf = df.groupby('col1')
    for j,locDf in groupedDf:
        temp = locDf.col2
    
        for k in range(len(temp)):
            colName = f'col2{k+1}'
            value = temp.iloc[k]
            df.loc[groupedDf.indices[j], [colName]] = value
    

    分配所有使用的列应该更快。这是另一个未经测试的示例:

    groupedDf = df.groupby('col1')
    for j,locDf in groupedDf:
        temp = locDf.col2
        colNames = [f'col2{k+1}' for k in range(len(temp))]
        df.loc[groupedDf.indices[j], colNames ] = temp
    

    【讨论】:

    • 非常感谢,性能上去了!感谢您投入的时间
    • @QuestionMan 欢迎您。如果它解决了问题,请不要忘记验证答案。
    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2022-01-08
    • 2013-03-28
    相关资源
    最近更新 更多