我在numpy中有一个名为np_charge的数据集,大小为(1430,258)。我的想法是创建一个新列,其中第一行包含等式的输出
第一行:np_charge [-1] [1] -np_charge [0] [1]
第二行:np_charge [-1] [1] -np_charge [1] [1]。 。 。
最后一行:np_charge [-1] [1] -np_charge [1429] [1]
我试图在互联网上找到解决方案,但找不到任何解决方案。我的解决方案如下所示:
e=[]
n_rows=np_charge.shape[0]-1
for i in range(n_rows):
e[i]=(np_charge[-1][1]-np_charge[i][1])
但我收到此错误代码:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-988-9463a5cb0618> in <module>()
15
16 for i in range(n_rows):
---> 17 e[i]=np_charge[-1][1]-np_charge[i][1]
18
19
IndexError: list assignment index out of range
谢谢,R
不建议使用循环。 Numpy经过优化,可以进行数组操作。一个简单的例子:
L = np.random.randint(0, 5, size=(20, 10))
new = L[-1][1]-L[:][1]
Out[61]: array([-3, 0, -3, 0, 1, -1, 0, 1, -3, -2])
所以在你的情况下,新列将是相同的,但使用np_charge
而不是L
。
N.B:您的错误来自于您不使用列表append()
的e
方法。第一次迭代,您在列表[]
中查找索引0,该索引不存在。
正如您在其中一条评论中所阐明的那样。创建MVE
from datetime import datetime
from dateutil.relativedelta import relativedelta
import random
a=np.array([datetime.now()-relativedelta(months=random.randint(0,100)) for i in range(10)])
print(a)
输出:
array([datetime.datetime(2014, 10, 12, 9, 0, 31, 696000),
datetime.datetime(2018, 9, 12, 9, 0, 31, 696000),
datetime.datetime(2014, 4, 12, 9, 0, 31, 696000),
datetime.datetime(2011, 4, 12, 9, 0, 31, 696000),
datetime.datetime(2015, 10, 12, 9, 0, 31, 696000),
datetime.datetime(2011, 11, 12, 9, 0, 31, 696000),
datetime.datetime(2016, 3, 12, 9, 0, 31, 696000),
datetime.datetime(2017, 10, 12, 9, 0, 31, 696000),
datetime.datetime(2010, 6, 12, 9, 0, 31, 696000),
datetime.datetime(2016, 2, 12, 9, 0, 31, 696000)], dtype=object)
我假设数组的最后一个索引。因此
result=a[len(a)-1]-a
[datetime.timedelta(488),
datetime.timedelta(-943),
datetime.timedelta(671),
datetime.timedelta(1767),
datetime.timedelta(123),
datetime.timedelta(1553),
datetime.timedelta(-29),
datetime.timedelta(-608),
datetime.timedelta(2071),
datetime.timedelta(0)]