从熊猫细分中获取价值并在适当位置减去

时间:2019-03-08 16:25:18

标签: python 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列的区别。所以我的第一段是0到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似乎并不太有效

1 个答案:

答案 0 :(得分:1)

这是一种方法:

df['segVal'] = df.where(df.val2.ne(0)).val1.dropna().diff().reindex(df.index).bfill()

   val1  val2  val3  segVal
0  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