为了账号安全,请及时绑定邮箱和手机立即绑定

Python 函数不根据数据框中的数字返回匹配行

Python 函数不根据数据框中的数字返回匹配行

犯罪嫌疑人X 2023-12-09 15:58:49
我在 pandas 中有一个像这样格式化的数据框。(df)School ID      Column 1       Column 2     Column 3School 1                      8100         8200  School 2       9-999 School 3                      9300         9500 School 4                      7700         7800 School 5       8999....我希望能够输入一个值,例如如果该值是直接命中第1列(字符串类型),例如输入数字:9-999,它将返回Input Number: 9-999School ID     Column 1School 2      9-999但如果输入的数字介于第 2 列和第 3 列(浮点数)中的数字之间,我想返回关联的学校 ID,如下所示。Input Number: 8110School ID      Column 2    Column 3School 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']]但我收到一条错误消息:“返回”外部函数
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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


查看完整回答
反对 回复 2023-12-09
  • 1 回答
  • 0 关注
  • 45 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信