Python 3.x 在python中,如何管理介于两个范围之间的值?
我有一个数据帧Python 3.x 在python中,如何管理介于两个范围之间的值?,python-3.x,pandas,list,dataframe,range,Python 3.x,Pandas,List,Dataframe,Range,我有一个数据帧df: A 1 12 2 15.5 3 20.5 4 30.5 5 15 范围: 功能: 结果应该如下所示: 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
df
:
A
1 12
2 15.5
3 20.5
4 30.5
5 15
范围:
功能:
结果应该如下所示:
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
我知道为什么会发生这种情况,它没有考虑范围(0,5)=[0,1,2,3,4,5]和范围(6,10)=[6,7,8,9,10]之间的值,现在它没有考虑范围(0,5)=[0,1,2,3,4,5]之间的值。如果有一个值
5.5或5.8
。那么它不会考虑它,并返回<代码> n>代码>。如何避免这种情况?问题似乎是最后一个值,它不是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]
更改值后,没有NaN
s:
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
但我的问题是,如果范围(0,6)给出[0,1,2,3,4,5],范围(6,10)=[,6,7,8,9]。现在,5和6之间的值会发生什么变化,即“5.1-5.9”。@astroluv然后在
范围(0,6)
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]
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