【问题标题】:subtract values from different lines从不同的行减去值
【发布时间】:2018-12-18 07:26:32
【问题描述】:

我有一个正在读取的 csv 文件,我有一列数字字符串,我正在尝试获取后续两行之间的差异。这些数字在值后面带有“ft”的深度(例如 4.23 英尺),我能够摆脱“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)

这给了我一个“'float' object is not iterable”的 TypeError。 当我注释掉“depth = float(depth)”行时,我只得到 -1 值,我理解那里的问题。

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

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

【问题讨论】:

标签: python-3.x


【解决方案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'])

【讨论】:

  • 尝试了你的建议,现在我得到 "Series([], dtype: float64)" depth = float(depth) df=pd.DataFrame() df['d1']=depth df ['d2']=df['d1'].shift(-1) df['rate'] = df['d1']-df['d2'] print(depth,d1,d2,rate) 输出自打印行:4.23 4 5 Series([], dtype: float64)
  • 修复了“Series([], dtype: float64)”,但是我得到 4 的 d1 值应该与我得到 4.23 的深度值匹配,我想知道它是否被截断,但我仍然不知道为什么 d2 值在它应该是下一行时弹出为 5,这恰好也是 4.23
  • 抱歉回复晚了。您能否通过编辑问题发布您的原始数据框和最终预期数据框?从 cmets 很难理解。
  • 我也为迟到的回复道歉,我相信我添加了您要求的信息,如果不是,我也为此道歉并请求定义数据框。
猜你喜欢
  • 2022-09-23
  • 1970-01-01
  • 2022-01-21
  • 2021-01-28
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多