如何在python数据框中找到列产品列

问题描述

我有这样的数据框:

  DP 1    DP 2    DP 3    DP 4    DP 5    DP 6    DP 7    DP 8    DP 9   DP 10
 2.720   1.748   1.462   1.228   1.152   1.055   1.063   1.080   1.001  
 4.361   1.641   1.430   1.117   1.181   1.018   1.052   1.096      
 3.345   1.840   1.505   1.262   1.115   1.095   1.053          
 2.663   1.748   1.352   1.256   1.051   1.119              
 3.494   1.907   1.506   1.108   1.091                  
 3.104   1.559   1.458   1.092                      
 2.978   1.484   1.374                          
 3.066   1.695                              
 2.876                                                          
 1.179   1.699   1.439   1.179   1.116   1.073   1.055   1.089   1.001   1.000 

我必须找到这个:

 4.680   3.971   2.337   1.624   1.377   1.234   1.150   1.090   1.001   1.000 

由公式: 我必须找到最后一行第一个元素和其余元素的乘积,即:product(1.179 to 1.000)=4.680 然后下一个产品(1.699 到 1.000)=3.971 依此类推...

PRODUCT(first:last)

PRODUCT(second:last)

PRODUCT(third:last)

等等...

解决方法

假设您的数据框已经有最后一行,这样 df.iloc[[-1]] 是:

 DP 1   DP 2   DP 3   DP 4   DP 5   DP 6   DP 7   DP 8   DP 9  DP 10
1.179  1.699  1.439  1.179  1.116  1.073  1.055  1.089  1.001    1.0

反转系列并取cumulative product

df.iloc[-1][::-1].cumprod()
# output
DP 10    1.000000
DP 9     1.001000
DP 8     1.090089
DP 7     1.150044
DP 6     1.233997
DP 5     1.377141
DP 4     1.623649
DP 3     2.336431
DP 2     3.969596
DP 1     4.680154

为了恢复原来的顺序,反转结果:

df.iloc[-1][::-1].cumprod()[::-1]
# output
DP 1     4.680154
DP 2     3.969596
DP 3     2.336431
DP 4     1.623649
DP 5     1.377141
DP 6     1.233997
DP 7     1.150044
DP 8     1.090089
DP 9     1.001000
DP 10    1.000000

(这些数字看起来略有不同,因为您在问题中对它们进行了四舍五入。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...