当我使用数据帧时,有更好的方法来编写这样的循环吗?

问题描述 投票:0回答:2

当我使用数据帧时,有更好的方法来编写这样的循环吗? 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])
python pandas dataframe
2个回答
0
投票

您可以对pandas数据帧执行算术运算,并且pandas将尝试自动匹配索引(即将具有相同标签的列/行汇总在一起,否则为NaN)。如果你想要更多地控制缺失数据的处理,你可以看看addsub方法(doc1doc2)。

我假设在你的情况下ab是两个相同标签的数据帧。

所以你可以简单地做:

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。


4
投票

我想你可以这样做:

c = pd.DataFrame(abs((a.values-b.values)/(a.values+b.values)))
© www.soinside.com 2019 - 2024. All rights reserved.