首页 > 解决方案 > 从具有相同索引和列的两个 pandas 数据帧执行计算的最快方法

问题描述

我有两个熊猫数据框,每个都有相同的索引和列。我想创建第三个 pandas 数据框,其中包含其他两个单元格的乘积。

这是我目前的解决方案,但它非常缓慢。

import pandas as pd

new_df = pd.DataFrame(columns=df1.columns, index=df1.index, data=[])

for col, values in new_df.iteritems():
    for idx, value in values.iteritems():
        foo = df1.loc[idx][col]
        bar = df2.loc[idx][col]

        new_df.set_value(idx, col, foo * abs(bar))

有什么更好的方法可以更快地做到这一点?谢谢!

标签: pythonpython-3.xpandas

解决方案


正如我在上面的评论中提到的,你可以使用DataFramemul DataFrame,因为pandasisindexcolumnssensitive ,每当它计算值时,只有两个隐藏键(indexcolumns)只有当两者都匹配时,它才会计算值,如果不是,它不会计算(返回NaN

在您的情况下,您可能希望添加reindex_like保护,这样您就不会有任何不需要的列仅在 df2 中退出。

df1.mul(df2.abs().reindex_like(df1),fill_value=0)

推荐阅读