【问题标题】:How to manage the values that falls in between two ranges in python?如何管理python中两个范围之间的值?
【发布时间】:2020-04-29 10:19:23
【问题描述】:

我有一个数据框df

     A  
1   12       
2   15.5
3   20.5
4   30.5
5   15

范围:

x_range = [list(range(0,5)),list(range(6,10)),list(range(11,15)),list(range(15,20)),list(range(21,25))]

功能:

def min_max_range(x,y):
    for a in y:
        if int(x) in a:
            min_val = min(a)
            max_val = max(a)+1
            return max_val - min_val

结果应该是这样的:

df['A'].apply(lambda x: min_max_range(x,x_range))

     A      B
1   12      5 
2   15      5
3   20.5    4
4   5.5     4
5   15.5    4

但我得到的是:

     A      B
1   12      4 
2   15      5
3   20.5   NA
4   5.5    NA
5   15.5   NA

我知道为什么会这样,它没有考虑range(0,5) = [0,1,2,3,4,5]range(6,10) = [6,7,8,9,10] 之间的值,现在它没有考虑between 5 & 6 之间的值。如果有值5.5 or 5.8。那么它不会考虑它并返回NA。我怎样才能避免这种情况?

【问题讨论】:

    标签: python-3.x pandas list dataframe range


    【解决方案1】:

    问题似乎是最后一个值,不是5,而是4,所以在范围内最后一个值缺失:

    print (list(range(0,5)))
    [0, 1, 2, 3, 4]
    print (list(range(6,10)))
    [6, 7, 8, 9]
    print (list(range(11,15)))
    [11, 12, 13, 14]
    

    我认为有必要将一个值添加到范围内的第二个整数,例如:

    print (list(range(0,6)))
    [0, 1, 2, 3, 4, 5]
    print (list(range(6,11)))
    [6, 7, 8, 9, 10]
    print (list(range(11,16)))
    [11, 12, 13, 14, 15]
    

    更改值后没有NaNs:

    x_range = [list(range(0,6)),list(range(6,11)),list(range(11,16)),
               list(range(16,21)),list(range(21,26))]
    
    def min_max_range(x,y):
        for a in y:
            if int(x) in a:
                min_val = min(a)
                max_val = max(a)+1
                return max_val - min_val
    
    df['B'] = df['A'].apply(lambda x: min_max_range(x,x_range))
    print (df)
          A  B
    1  12.0  5
    2  15.0  5
    3  20.5  6
    4   5.5  6
    5  15.5  5
    

    【讨论】:

    • 但我的问题是,如果 range(0,6) 会给出 [0,1,2,3,4,5] 和 range(6,10) = [,6,7,8 ,9]。现在 5 和 6 之间的值会发生什么,即“5.1 - 5.9”。
    • @astroluv 然后在range(0,6)中匹配5&6之间的值
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多