使用数据帧时是否有更好的方法来编写这样的循环? 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])
答案 0 :(得分:4)
我认为你可以这样做:
c = pd.DataFrame(abs((a.values-b.values)/(a.values+b.values)))
答案 1 :(得分:0)
您可以对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中的循环,因为它们非常低效,并且在某种程度上有点失败了拥有pandas DataFrame的目的。
如果您需要非常具体的循环结构,也许您最好使用numpy。