我有一张表,其值类似于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 似乎效率不高
1 回答

慕尼黑8549860
TA贡献1818条经验 获得超11个赞
这是一种方法:
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
添加回答
举报
0/150
提交
取消