Python 意外地迭代列表中的每个元素两次

Python is unexpectedly iterating over each element in a list twice

在下面的函数中,我试图对数据帧列表中包含的数据帧中的价格进行标准化(将它们转换为与起始价格的百分比差异)。每个数据框都有两列:日期和价格。

    def normalize_windows(window_data: List[DataFrame]):

        starting_price = window_data[0]['price'].values[0]

        for window in window_data:
           for index, row in window.iterrows():
               window.at[index, 'price'] = (row['price'] / starting_price) - 1
            
        return window_data

现在,当我调试 python 中的代码时,列表中的每个数据帧都会因此循环两次,从而使所有值或多或少 -1。

我的循环方式是否有我不知道的意外行为?

您不需要迭代:

>>> df
   price
0     12
1     15
2     10
3     12
4     12
5     18
6     11
7     12
8     15
9     10
>>> df['price'] / df.iloc[0]['price'] - 1
0    0.000000
1    0.250000
2   -0.166667
3    0.000000
4    0.000000
5    0.500000
6   -0.083333
7    0.000000
8    0.250000
9   -0.166667
Name: price, dtype: float64
def normalize_windows(window_data: List[DataFrame]):

    starting_price = window_data.iloc[0]['price']
    window_data = (window_data['price'] / starting_price - 1)
            
    return window_data