基于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
相关产品推荐
相关产品推荐

