将两个数据框相乘,基于一列和跳过行不满足条件



我有两个数据框,第一个有两个索引(国家和产品(和关联的变量值。我有 20 个国家和 7 个产品。请注意,在此数据框中,我可以有两行具有相同的国家/地区和产品,因为每行对应于不同的观测值。

DF1

                                        value
Country     Product 
Guatemala   Hydro                       259.420233
            Oil                         4.211656
            Oil                         341.550360
            Coal, peat and oil shale    4.311316
            Coal, peat and oil shale    NaN
            Hydro                       24.433527
Colombia    Oil                         10
            Coal, peat and oil shale    4.311316
.
.
.

第二个数据框与下面显示的完全一样

DF2

                                        mult
Country     Product 
Argentina   Natural gas                 1
Colombia    Oil                         161
Mexico      Coal, peat and oil shale    9
            Natural gas                 2

我正在尝试将两个数据框相乘。最终数据框的行必须等于第一个数据框。当 df2 中没有任何可用值来乘以 df1 中的行时(例如危地马拉/石油(,则 df1 中的值必须保持不变。

我非常感谢您的帮助。我已经尝试了许多选项和任何作品。

首先,对将生成重复项的列进行索引不是一个好主意。如果您真的渴望违反该最佳实践,您仍然可以按照下面的说明进行操作,然后将其更改回原始索引。

import pandas as pd
import numpy as np
df1 = df1.reset_index(drop = False)
df2 = df2.reset_index(drop = False)
df3 = df1.merge(df2, on = [‘product’, ‘country’], how = ‘left’)
df3[ ‘result’] = np.where(df3.mult.isnull(), df3.value, df3.value * df3.mult)
#now, disrespect all that is holy
df3 = df3.set_index([‘product’, ‘country])

最新更新