我有一个表,其值类似于
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似乎并不太有效
答案 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