首页 > 解决方案 > 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']]

但我收到一条错误消息:“返回”外部函数

谢谢您的帮助。

标签: pythonpandas

解决方案


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])

推荐阅读