python - Python函数没有根据数据框中的数字返回匹配的行
问题描述
我在熊猫中有一个像这样格式化的数据框。
(df)
School ID Column 1 Column 2 Column 3
School 1 8100 8200
School 2 9-999
School 3 9300 9500
School 4 7700 7800
School 5 8999
....
我希望能够输入一个值,例如如果该值是第 1 列(字符串类型)的直接命中,例如输入编号:9-999,它将返回
Input Number: 9-999
School ID Column 1
School 2 9-999
但如果输入的数字介于第 2 列和第 3 列中的数字(浮点数)之间,我想返回关联的 School ID,例如这样。
Input Number: 8110
School ID Column 2 Column 3
School 5 8100 8200
现在我有这个代码:
def find(num) :
d1=df.loc[df['Column 1']==num]
if len(d1)>0 :
return d1[['School ID','Column 1']]
else :
return df.loc[(num>= df['Column 2']) & (num<= df['Column 3'])][['School ID','Column 2','Column 3']]
但我收到一条错误消息:“返回”外部函数
谢谢您的帮助。
解决方案
s = '9-999'
q = df[df['Column_1']==str(s)]
if len(q):
print(q)
else:
m = df[['Column_2', 'Column_3']].apply(lambda x: x['Column_2'] <= s <= x['Column_3'], axis=1)
print(df[m])
印刷:
School_ID Column_1 Column_2 Column_3
1 School 2 9-999 0.0 0.0
对于s = 8110
:
School_ID Column_1 Column_2 Column_3
0 School 1 0 8100.0 8200.0
编辑:要具有一致的数据类型,您可以将 Column2 和 Column3 转换为浮点数:
s = '8110'
q = df[df['Column_1']==str(s)]
df['Column_2'] = df['Column_2'].astype(float)
df['Column_3'] = df['Column_3'].astype(float)
if len(q):
print(q)
else:
s = float(s)
m = df[['Column_2', 'Column_3']].apply(lambda x: x['Column_2'] <= s <= x['Column_3'], axis=1)
print(df[m])