如何编写Python函数在pandas DataFrame中按日期查询匹配数据行?
问题排查
你现有的代码存在3个核心错误:
- 逻辑路径错误:
df1['date'].eq(date).any()仅返回布尔值(表示是否存在匹配日期),不能将该布尔值作为条件去匹配orders列的数值 - 筛选逻辑错误:你需要按
date列筛选匹配行,而非按orders列筛选 - 类型兼容问题:
date列为datetime类型,传入的字符串日期需要做类型对齐,避免隐式转换导致匹配失败
修正后代码
import pandas as pd # 建议将df作为参数传入函数,避免依赖全局变量 def weekoforders(target_date, df): # 转换传入日期为datetime类型,和df的date列对齐 target_date = pd.to_datetime(target_date) # 直接筛选date列匹配的行 matched = df[df['date'] == target_date] # 匹配到就返回,没匹配到返回'no' return matched if not matched.empty else 'no' # 调用测试 print(weekoforders('2020-08-07', df1))
如果你的需求是仅返回对应orders列的数值而非整行,把返回行替换为:
return matched['orders'].iloc[0] if not matched.empty else 'no'
输出说明
调用weekoforders('2020-08-07', df1)返回结果如下:
date orders 5350549 2020-08-07 5555
如果是仅返回orders值的版本,会直接返回5555
内容的提问来源于stack exchange,提问作者odevney
相关产品推荐
相关产品推荐

