当我使用数据帧时,有更好的方法来编写这样的循环吗? a,b是数据帧(4,1096)
c = pd.DataFrame(np.zeros((4, 1096)))
for j in range(0, 4):
for i in range(0, 1096):
c[i][j]=abs((a[i][j]-b[i][j]))/(a[i][j]+b[i][j])
您可以对pandas数据帧执行算术运算,并且pandas将尝试自动匹配索引(即将具有相同标签的列/行汇总在一起,否则为NaN)。如果你想要更多地控制缺失数据的处理,你可以看看add和sub方法(doc1,doc2)。
我假设在你的情况下a
和b
是两个相同标签的数据帧。
所以你可以简单地做:
c = ((a - b) / (a + b)).abs()
至于你对DataFrame的不同行的评论,你可以使用shift创建一个DataFrame b
,使'b [i,:]'= a [i + 1,:],然后重复上面的操作:
c = ((a - a.shift(-1)) / (a + a.shift(-1))).abs()
您可以轻松地将其概括为不同的班次。
大熊猫最好的功能之一就是索引对齐,所以我建议避免使用pandas中的循环,因为它们非常低效,并且在某种程度上有点失败了拥有pandas DataFrame的目的。
如果您需要非常具体的循环结构,也许您最好使用numpy。
我想你可以这样做:
c = pd.DataFrame(abs((a.values-b.values)/(a.values+b.values)))