使用Python

时间:2018-02-11 12:31:44

标签: python pandas

我有以下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

3 个答案:

答案 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