首页 > 解决方案 > 选择具有两个条件的特定值时出现 KeyError

问题描述

我的数据库有关于不同日期和不同时间的不同植物的数据,以及对它们进行的一些计算。我想创建“迷你”数据集,当每个数据集将包含有关不同日期和数据的数据时。例如:数据集 1:所有植物,日期:17/6,小时 12:00,处理,线,NDVI .....

在此处输入图像描述

我尝试使用代码来做到这一点

df_07=df_indices[(df_indices['date']=='6/17/2019') & (df_indices['Hour'] > '12:00')]

但我不断得到KeyError:

键错误:“日期”

我不知道为什么它不能识别日期,因为正如您在图像中看到的那样,它具有列日期。会因为我使用“日期”作为索引而发生吗?

我的最终目标是为所有植物创建一个只有一个日期和一小时的新表格。

标签: pythonpandasconditional-statements

解决方案


使用Index.get_level_values

m1 = (df_indices.index.get_level_values('date')=='6/17/2019')

对于第二个掩码,将值转换为 timedeltasto_timedelta并与 进行比较Timedelta

m2 = pd.to_timedelta(df_indices.index.get_level_values('Hour')+':00') > pd.Timedelta(12, 'h')

df_07=df_indices[m1 & m2]

更好的解决方案是加入date级别hour,因此可以通过datetimes 进行比较:

样本数据:

df_indices = pd.DataFrame({'date':['6/17/2019','6/17/2019'],
                           'Hour':['15:00','10:00'],
                           'col':[4,5]}).set_index(['date','Hour'])


print (df_indices)
                 col
date      Hour      
6/17/2019 15:00    4
          10:00    5

dates = pd.to_datetime(df_indices.index.get_level_values('date') + ' ' + 
                       df_indices.index.get_level_values('Hour'))
print (dates)
DatetimeIndex(['2019-06-17 15:00:00', '2019-06-17 10:00:00'], 
              dtype='datetime64[ns]', freq=None)


df_07=df_indices[dates > '2019-06-17 12:00:00']
print (df_07)
                 col
date      Hour      
6/17/2019 15:00    4

推荐阅读