我有以下df并希望向后写数字列,并在必要时覆盖其他值。条件是始终使用前一个值,除非旧值与旧值的差值大于10%。
Date Number
2019 150
2018 NaN
2017 118
2016 NaN
2015 115
2014 107
2013 105
2012 NaN
2011 100
由于条件,例如2013年等于100,因为它不小于90且不大于110.结果如下:
Date Number
2019 150
2018 115
2017 115
2016 115
2015 115
2014 100
2013 100
2012 100
2011 100
答案 0 :(得分:2)
您可以撤消列,然后apply
更改值以更新值。最后将列反转为原始顺序:
def get_val(x):
global prev_num
if x and x > prev_num*1.1:
prev_num = x
return prev_num
prev_num = 0
df['number'] = df['number'][::-1].apply(get_val)[::-1]
答案 1 :(得分:1)
这是一种方法。它假定第一个值100不是{"words": ["dog", "man", "best", "friend"]}
,并且原始数据框按年份降序排序。如果性能是个问题,那么循环可以转换为列表理解。
NaN
答案 2 :(得分:1)
将地面除法后的差异除以10,不等于零,然后转换最小值,即
Sub CopyMacro()
'
' CopyData Macro
'
Dim tableName As ListObject
Set tableName = Worksheets("ToCopySheet").ListObjects(1)
ListObjects("Table1").ListColumns("TaskUID").DataBodyRange.Copy tableName.ListColumns("TaskUID").DataBodyRange
End Sub