You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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")
解决方案

原代码的问题

  1. 逻辑错误:原代码判断的是「存在匹配日期的行」且「存在匹配浮点数的行」,但没有要求这两个条件在同一行满足。比如示例中即使日期匹配的行和浮点数匹配的行是不同的,代码也会输出YES,不符合需求。
  2. 语法错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:45:21