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

Posted

技术标签:

【中文标题】将两个数据框相乘,基于列并且跳过行不满足条件【英文标题】:Multiply two data frames, base on a columns and skipping rows do not fulfill a condition 【发布时间】:2019-06-29 19:19:07 【问题描述】:

我有两个数据框,第一个有两个索引(国家和产品)和相关变量的值。我有 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 中的值必须保持不变。

非常感谢您的帮助。我尝试了很多选择和任何工作。

【问题讨论】:

df1.multiply(df2.rename(columns='mult': 'value'), fill_value=1)?或许看看下面的问题:***.com/questions/54540704/…。该操作是减法,但变化很小,除了可能想要设置fill_value=1。你甚至已经在这里有了 MultiIndex... @ALollz 我收到此错误 TypeError: ' 我无法用您提供的数据重现。您的DataFrames 之一是否具有NaN 的索引级别?如果是这样,您需要删除该行。在乘法尝试之前:df1 = df1.reindex(df1.index.dropna()) 和 df2 相同 【参考方案1】:

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

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])

【讨论】:

以上是关于将两个数据框相乘,基于列并且跳过行不满足条件的主要内容,如果未能解决你的问题,请参考以下文章

pandas基于组合逻辑筛选dataframe中两个数据列都满足条件的数据行(两个指定数据列的值都大于零的数据行)

Pandas-如何添加条目跳过行的列?

在同一列内相乘

创建一个新列,它是满足两个条件的多个其他列中的日期数之和

Excel满足两个条件,求和的公式

pandas - 根据满足条件的列合并行