如何遍历行并将基于上一行的值插入新列

时间:2019-08-27 08:04:10

标签: python pandas

我有一些DataFrame,我正尝试添加具有上一行和当前行的计算值的新列。
问题是我需要为每一行获得相同的结果(当它需要不同时)

我做了一个获取CSV的函数,将其转换为df并进行了更改。

def index_csv_update(file_path):
    df = pd.read_csv(file_path)
    df.drop(["Adj Close"], axis=1, inplace=True)
    df.drop(["Volume"], axis=1, inplace=True)
    print(df.head())
    start = 0
    for i, row in df.iterrows():
        first_row = df.iloc[start, 4]
        try:
            second_row = df.iloc[start + 1, 4]
        except IndexError:
            second_row = 'null'
        if not second_row == 'null':
            df['Daily Change %'] = np.float((second_row/first_row)-1)
        start += 1
    df.to_csv(file_path, index=False)

打印结果:

         Date   Open   High    Low  Close  Daily Change %
0  2018-07-09  13.02  13.22  12.60  12.69        0.011575
1  2018-07-10  12.52  13.21  11.93  12.64        0.011575
2  2018-07-11  14.05  14.15  13.09  13.63        0.011575
3  2018-07-12  13.07  13.33  12.42  12.58        0.011575
4  2018-07-13  12.39  12.97  11.62  12.18        0.011575
Daily Change %列上的

应该有不同的数字。 我找不到问题,
请帮助谢谢。

1 个答案:

答案 0 :(得分:1)

您在使用时会看到

df['Daily Change %'] = np.float((second_row/first_row)-1)

您使用值..创建一个新列,您需要使用loc或iloc。

import pandas as pd
import numpy as np
df = pd.DataFrame({'foo': [1,2,3,3], 'bar': [1.2,2.3,3.5,1.3], 'foo2':[None, None, None, None]})
print(df)

start=0
for i, row in df.iterrows():
        first_row = df.iloc[start, 1]
        try:
            second_row = df.iloc[start + 1, 1]
        except IndexError:
            second_row = 'null'
        if not second_row == 'null':
            df.iloc[start,2] = np.float((second_row/first_row)-1)
        start += 1
print(df)

输出:

   foo  bar  foo2
0    1  1.2  None
1    2  2.3  None
2    3  3.5  None
3    3  1.3  None


   foo  bar      foo2
0    1  1.2  0.916667
1    2  2.3  0.521739
2    3  3.5 -0.628571
3    3  1.3      None