Pandas:找到最近的日期-没有set_index -多个条件



我们有如下的Pandas Dataframe:

# Stackoverflow question
data = {'category':[1, 2, 3, 1, 2, 3, 1, 2, 3], 'date':['2000-01-01', '2000-01-01', '2000-01-01', '2000-01-02', '2000-01-02', '2000-01-02', '2000-01-03', '2000-01-03', '2000-01-03']}  
df = pd.DataFrame(data=data)
df['date'] = pd.to_datetime(df['date'])
df
category    date
0   1   2000-01-01
1   2   2000-01-01
2   3   2000-01-01
3   1   2000-01-02
4   2   2000-01-02
5   3   2000-01-02
6   1   2000-01-03
7   2   2000-01-03
8   3   2000-01-03

我们如何查询这个数据框以查找类别3的日期2000-01-02 ?所以我们正在寻找索引为5的行

应该不使用set_index('date')来完成。原因如下,当在实际数据而不是示例数据上设置索引时,我收到以下错误:

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

取相关类别的一个子集,减去目标日期,得到idxmin

tmp = df.loc[df.category.eq(3)]
(tmp.date - pd.to_datetime("2000-01-02")).abs().idxmin()
# 5

要获得与类别3最接近的(第一个)索引日期,您可以使用:

m = df['category'].eq(3)
d = df['date'].sub(pd.Timestamp('2000-01-02')).abs()
d.loc[m].idxmin()

输出:5

df[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))]

获取所有索引的列表:

df.index[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))].tolist()

好吧:)

相关内容

最新更新