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

基于DataFrame多条件设置Python变量(含日期变量匹配)

解决方法:基于多列条件提取DataFrame中的值

核心问题在于你的DataFrame中Date列是字符串格式,而date = datetime.today()生成的是datetime.datetime对象,两者类型不匹配,直接条件判断会找不到匹配项,这也是你用np.where失败的原因。以下是具体解决方案:

步骤1:统一日期格式

先将DataFrame的Date列转为datetime类型,同时处理date变量确保格式一致(去掉时分秒部分):

import pandas as pd
import datetime
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'Date': ['28/09/2022', '28/09/2022', '28/09/2022', '27/09/2022', '27/09/2022', '27/09/2022'],
    'Product': ['apple', 'orange', 'pear', 'apple', 'orange', 'pear'],
    'Sales': [10.2, 5.1, 12.3, 4.1, 3.9, 15.0]
})

# 转换Date列为datetime类型(format匹配日/月/年格式)
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

# 处理date变量,仅保留日期部分
date = datetime.datetime.today().date()
# 若目标日期固定为28/09/2022,也可直接指定:
# date = datetime.date(2022, 9, 28)

方法1:布尔索引直接提取(最直观高效)

通过多条件筛选目标行,直接提取对应Sales值:

last_apple_sales = df[(df['Date'] == date) & (df['Product'] == 'apple')]['Sales'].values[0]
print(last_apple_sales)  # 输出:10.2

方法2:正确使用np.where

np.where返回满足条件的所有值数组,取第一个元素即可(需确保条件唯一匹配):

last_apple_sales = np.where((df['Date'] == date) & (df['Product'] == 'apple'), df['Sales'], np.nan)[0]
print(last_apple_sales)  # 输出:10.2

方法3:用df.loc精准定位

可读性更强的定位方式,直接指定行条件和目标列:

last_apple_sales = df.loc[(df['Date'] == date) & (df['Product'] == 'apple'), 'Sales'].iloc[0]
print(last_apple_sales)  # 输出:10.2

注意事项

  • 若条件可能匹配多行数据,需额外处理(如取平均值、最大值),以上示例默认条件唯一匹配。
  • 日期转换时format参数需与数据格式对应,若为其他格式需调整(如%Y/%m/%d对应年/月/日)。

内容的提问来源于stack exchange,提问作者AM12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:05:55