我正在编写一个函数,以使用Numpy和函数调用查找百分比变化。到目前为止,我得到的是:
change(a,b):
answer = (np.subtract(a[b+1], a[b])) / a[b+1] * 100
return answer
print(change(a,0))
“ a”是我制作的数组,b是我要计算的索引/数字。
例如:
我的阵列是
[[1,2,3,5,7]
[1,4,5,6,7]
[5,8,9,10,32]
[3,5,6,13,11]]
如何计算1到2(= 0.5)或1到4(= 0.75)或5,7等之间的百分比变化。
注意:我知道如何从数学上获得更改,我不确定如何在python / numpy中进行此操作。
答案 0 :(得分:2)
如果我正确理解,您正在尝试查找每一行的变化百分比,则可以执行以下操作:
>>> np.diff(a) / a[:,1:] * 100
哪个给您:
array([[ 50. , 33.33333333, 40. , 28.57142857],
[ 75. , 20. , 16.66666667, 14.28571429],
[ 37.5 , 11.11111111, 10. , 68.75 ],
[ 40. , 16.66666667, 53.84615385, -18.18181818]])
答案 1 :(得分:0)
import numpy as np
a = np.array([[1,2,3,5,7],
[1,4,5,6,7],
[5,8,9,10,32],
[3,5,6,13,11]])
np.array([(i[:-1]/i[1:]) for i in a])
答案 2 :(得分:0)
我知道您在记住Numpy时问了这个问题,并在上面得到了答案:
import numpy as np
np.diff(a) / a[:,1:]
我试图用熊猫解决这个问题。对于那些有相同问题,但使用熊猫代替Numpy的人
import pandas as pd
data = [[1,2,3,4,5],
[1,4,5,6,7],
[5,8,9,10,32],
[3,5,6,13,11]]
df = pd.DataFrame(data)
df_change = df.rolling(1,axis=1).sum().pct_change(axis=1)
print(df_change)
答案 3 :(得分:0)
如果您尝试从左至右计算%差异,则可接受的答案接近但不正确。 您应该得到以下百分比差异:
1,2,3,5,7
-> 100%, 50%, 66.66%, 40%
亲自检查:https://www.calculatorsoup.com/calculators/algebra/percent-change-calculator.php
按照Josmoor98所说的,您可以使用np.diff(a) / a[:,:-1] * 100
获得从左到右的百分比差异,这将为您提供正确的答案。
array([[100. , 50. , 66.66666667, 40. ],
[300. , 25. , 20. , 16.66666667],
[ 60. , 12.5 , 11.11111111, 220. ],
[ 66.66666667, 20. , 116.66666667, -15.38461538]])