如何在pandas DataFrame中精确匹配指定日期与浮点数组合?
问题:检查DataFrame中是否存在指定日期与浮点数的匹配行
给定如下DataFrame:
import pandas as pd data = [ ['2022-12-04 00:00:00', 5000.00], ['2022-12-04 00:00:00', 6799.50], ['2022-12-04 00:00:00', 5000.00], ['2023-01-10 00:00:00', 5000.00] ] df = pd.DataFrame(data, columns=['Date', 'Float']) date_input = "2022-12-04 00:00:00" float_input = "5000.00"
需要判断DataFrame中是否存在同一行同时匹配date_input和float_input的记录,期望输出"Yes"(因为第一行符合条件)。
尝试了以下代码但无法得到正确结果:
if ((df['Date'] == pd.Timestamp(date_input)).any()) and (df['Float'] == float(float_input).any(): print('YES') else: print("No")
解决方案
原代码的问题
- 逻辑错误:原代码判断的是「存在匹配日期的行」且「存在匹配浮点数的行」,但没有要求这两个条件在同一行满足。比如示例中即使日期匹配的行和浮点数匹配的行是不同的,代码也会输出YES,不符合需求。
- 语法错误:
float(float_input).any()括号位置错误,应该是(df['Float'] == float(float_input)).any(),但即使修正语法,逻辑依然不对。
正确实现方法
方法一:按位与筛选同一行的两个条件
import pandas as pd # 转换输入类型,确保和DataFrame中的数据类型一致 target_date = pd.Timestamp(date_input) target_float = float(float_input) # 用&(按位与)同时筛选两个条件,再用any()判断是否存在匹配行 if ((df['Date'] == target_date) & (df['Float'] == target_float)).any(): print("Yes") else: print("No")
方法二:整行匹配检查
直接对比每行的两个字段是否同时等于目标值:
target = [pd.Timestamp(date_input), float(float_input)] # 检查每行的两个字段是否都匹配目标值,再判断是否存在这样的行 if (df[['Date', 'Float']] == target).all(axis=1).any(): print("Yes") else: print("No")
方法三:用元组匹配行组合
把目标组合做成元组,检查DataFrame的行是否包含该元组:
target_tuple = (pd.Timestamp(date_input), float(float_input)) # 将DataFrame的两行转为元组列表,检查目标元组是否在其中 if target_tuple in df[['Date', 'Float']].itertuples(index=False, name=None): print("Yes") else: print("No")
以上三种方法都能正确判断是否存在同时匹配日期和浮点数的行,示例中都会输出"Yes"。
内容的提问来源于stack exchange,提问作者Djoe
相关产品推荐
相关产品推荐

