【问题标题】:Pandas data frame multiplication where the data frames are of different matrixPandas 数据帧乘法,其中数据帧具有不同的矩阵
【发布时间】:2021-11-27 21:57:55
【问题描述】:

df1 来自 excel 文件,列如下:

Currency Net Original Net USD COGS
USD 1.5 1.2 2.1
USD 1.3 2.1 1.2
USD 1.1 2.3 -1.1
Peso Mexicano 1.6 2.2 2.1

第 1 步:需要导出转化率列“Conv”,其中“货币”为“墨西哥比索”
#过滤“墨西哥比索”货币并将其作为单独的数据框 (df2)

df2 = df1[df1['Currency']== "Peso Mexicano"]

第 2 步: #接下来使用公式,使用公式从df2获取“转化率”

df2['Conv']= (df2['Net USD']/df2['Net Original'])

#输出 1.37

#将过滤后的结果“Conv”与“COGS”列相乘,得到想要的结果

df1['Inv'] = (df2['Conv']*df1['COGS'])*-1

display(df1)

但是,无论货币为“USD”,结果都会显示“NaN”列“Inv”。

预期输出:

Currency Net Original Net USD COGS Inv
USD 1.5 1.2 2.1 1.87
USD 1.3 2.1 1.2 0.64
USD 1.1 2.3 -1.1 -2.50
Peso Mexicano 1.6 2.2 2.1 1.87

【问题讨论】:

  • 您在预期输出中的数字与您的描述不符
  • 我相信描述与预期输出相匹配。在第 1 步之后,创建新的数据框 df2,其中只有一行数据,其中货币为墨西哥比索。然后在第 2 步中,使用 Net USD/Net Original 在 df2 中创建新列 Conv。现在,“Conv”列将值存储为 1.37。然后在下一步中,通过乘以 (1.37* COGS 值)*-1 创建新列“Inv”。
  • 我同意 1.37,但 Inv 编号对我来说没有意义,输入和输出之间的 COGS 也会发生变化
  • 我明白了,它在第三排。我现在将对其进行编辑。谢谢
  • 你如何得到-3.47?和-2.87?

标签: python pandas dataframe matrix-multiplication multiplication


【解决方案1】:

你需要聚合你的 conv 计算,即使只有一个值(我在这里取平均值)。

这是一个工作代码:

df2 = df1[df1['Currency'] == "Peso Mexicano"]
conv = (df2['Net USD']/df2['Net Original']).mean()
df['Inv'] = conv*df['COGS']-1

输出:

        Currency  Net Original  Net USD  COGS     Inv
0            USD           1.5      1.2   2.1  1.8875
1            USD           1.3      2.1   1.2  0.6500
2            USD           1.1      2.3  -1.1 -2.5125
3  Peso Mexicano           1.6      2.2   2.1  1.8875

【讨论】:

  • 感谢您的帮助。它奏效了。
猜你喜欢
  • 2022-07-14
  • 2018-05-06
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多