Pandas:查找最接近的日期 - 没有 set_index - 多个条件
Pandas: Find closest date - without set_index - multiple conditions
我们有以下 Pandas 数据框:
# Whosebug 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
df[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))]
获取所有索引的列表:
df.index[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))].tolist()
好的:)
要获取类别 3 的(第一个)最接近的索引日期,您可以使用:
m = df['category'].eq(3)
d = df['date'].sub(pd.Timestamp('2000-01-02')).abs()
d.loc[m].idxmin()
输出:5
我们有以下 Pandas 数据框:
# Whosebug 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
df[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))]
获取所有索引的列表:
df.index[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))].tolist()
好的:)
要获取类别 3 的(第一个)最接近的索引日期,您可以使用:
m = df['category'].eq(3)
d = df['date'].sub(pd.Timestamp('2000-01-02')).abs()
d.loc[m].idxmin()
输出:5