从不同的行中减去值

时间:2018-12-15 17:05:08

标签: python-3.x

我有一个正在读取的csv文件,有一列数字字符串,并且我试图获取两个后续行之间的差异。这些数字在值(例如4.23ft)之后的深度处带有“ ft”,我能够摆脱“ ft”(例如4.230),但无法弄清楚如何分配值,因此我可以做数学。

    depth = float(depth)
    rate=0
    '''Need to find a way to subtract next line from current line to find 
    rate of change over 15 minute period'''
    for i, data in enumerate(depth):
        d1=i
        d2=i+1
        while rate == 0:
            rate = d1-d2                 
            print(rate)

这给了我一个TypeError的“'float'对象不可迭代”。 当我注释掉“ depth = float(depth)”这一行时,我只得到-1值,我知道那里的问题。

first few lines of raw data first few lines of result data

第二行第一个值减去第二个值等于第三行中的第一个值。

1 个答案:

答案 0 :(得分:1)

由于您已经从列中删除了“ ft”部分,并假设已将字符串的其余部分转换为浮点型,所以我将直接跳至下一部分。

如果我了解要正确实现的目标,还可以使用pandas.DataFrame.shift

df = pd.DataFrame()
df['D1'] = [1.0, 2.0, 3.0, 4.0, 5.0]

通过执行移位操作,您的D1是当前行中的值,D2将是D1中的列。

df['D2'] = df['D1'].shift(-1)

您的数据框现在将如下所示:

    D1   D2
0  1.0  2.0
1  2.0  3.0
2  3.0  4.0
3  4.0  5.0
4  5.0  NaN

简而言之,您会将当前行的下一行的值添加到新列中。现在,您可以照常在两列之间执行减法/差分运算。例如:

df['D3'] = df['D1'] - df['D2']

df['D3'] = df['D1'].sub(df['D2'])