【发布时间】:2021-12-30 09:54:56
【问题描述】:
我想根据不同数据框的范围清理数据。
范围数据看起来像
labs_range= pd.DataFrame({"Lab":['Albumin','Sodium','Potassium'],'low': [2,2,3],
'high':[4,5,4]})
Lab low high
0 Albumin 2 4
1 Sodium 2 5
2 Potassium 3 4
我想清理的数据看起来像:
labs = pd.DataFrame({"Albumin":[1,1,2,1,2,3,4,5],'Calcium':[1,1,2,1,2,3,4,5],'Sodium':[1,1,2,1,2,3,4,5]})
Albumin Calcium Sodium
0 1 1 1
1 1 1 1
2 2 2 2
3 1 1 1
4 2 2 2
5 3 3 3
6 4 4 4
7 5 5 5
我可以通过使用循环来做到这一点,但如果我们的数据很大,那将花费太长时间。
for i in labs_range['Lab']:
try:
labs[i] = np.where((labs[i]<labs_range.loc[labs_range['Lab']==str(i),'low'].values[0]) | (labs[i]>labs_range.loc[labs_range['Lab']==str(i),'high'].values[0]),np.nan,labs[i])
except:
print(i)
我们从这个循环中得到的结果是正确的,但希望它更有效。
Albumin Calcium Sodium
0 nan 1 nan
1 nan 1 nan
2 2.00000 2 2.00000
3 nan 1 nan
4 2.00000 2 2.00000
5 3.00000 3 3.00000
6 4.00000 4 4.00000
7 nan 5 5.00000
【问题讨论】:
标签: python python-3.x pandas numpy