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

Pandas 将两个数据帧相乘,基于列和跳过行不满足条件,pandas,dataframe,multi-index,multiplication,Pandas,Dataframe,Multi Index,Multiplication,我有两个数据框,第一个有两个索引(国家和产品)和相关变量的值。我有20个国家和7种产品。请注意,我可以在这个数据框中有两行具有相同的国家和产品,因为每行对应于不同的观察结果 df1 第二个数据帧与下面显示的完全相同 df2 我试图将两个数据帧相乘。最终数据帧的行必须等于第一个数据帧。当df2中没有任何可用值与df1中的行相乘时(例如危地马拉/石油),df1中的值必须保持不变 我真的很感谢你的帮助。我已经尝试了许多选项和任何工作。首先,对将生成重复项的列进行索引不是一个好主意。如果你真的渴望违反这

我有两个数据框,第一个有两个索引(国家和产品)和相关变量的值。我有20个国家和7种产品。请注意,我可以在这个数据框中有两行具有相同的国家和产品,因为每行对应于不同的观察结果

df1

第二个数据帧与下面显示的完全相同

df2

我试图将两个数据帧相乘。最终数据帧的行必须等于第一个数据帧。当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])

df1.multiply(df2.rename(columns={'mult':'value'}),fill_value=1)
?也许看看下面的问题:。操作是减法,但变化很小,除了可能想要设置
fill\u value=1
。你甚至已经在这里有了多重索引…@ALollz我得到了这个错误类型error:“我无法用你提供的数据重现它。您的
数据帧中是否有一个索引级别为
NaN
?如果是,则需要删除该行。在乘法之前,请尝试:
df1=df1.reindex(df1.index.dropna())
,对于df2也是如此
                                        mult
Country     Product 
Argentina   Natural gas                 1
Colombia    Oil                         161
Mexico      Coal, peat and oil shale    9
            Natural gas                 2
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])