从 Pandas 段中获取值并原地减去

我有一张表,其值类似于


val1     val2     val3    segVal

  0      12.3     88.2

 20         0        0

 50      14.5     88.7

 70         0        0

 85         0        0

 90      18.2     88.9

对于我的 segVal,我需要使用与已知 val2 的 val1 列的差异。所以我的第一段将是零到 50,我从 0 中减去并将其应用于所有 segVal 行。我的下一段是 90,所以我会从 50 中减去它并应用它。


所以我的输出表将是


val1     val2     val3    segVal

  0      12.3     88.2     50

 20        0         0     50

 50      14.5     88.7     50

 70         0        0     40

 85         0        0     40

 90      18.2     88.9     40

我目前的工作方法是


df1 = df[df.val2 != 0]

df1 = df1.copy()

df1.segVal=(df1['val1'].diff(-1))*1

所以我正在创建一个额外的 df 并以这种方式计算值,然后将这些值与原始 df 合并。


似乎必须有更好的方法来做到这一点,我的意思是,我的方法有效,但创建额外的 df 似乎效率不高


MMMHUHU
浏览 195回答 1
1回答

慕尼黑8549860

这是一种方法:df['segVal'] = df.where(df.val2.ne(0)).val1.dropna().diff().reindex(df.index).bfill()   val1  val2  val3  segVal0  0     12.3  88.2  50.0  1  20    0.0   0.0   50.0  2  50    14.5  88.7  50.0  3  70    0.0   0.0   40.0  4  85    0.0   0.0   40.0  5  90    18.2  88.9  40.0  
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python