我們有以下 Pandas 資料框:
# 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
uj5u.com熱心網友回復:
取相關類別的子集,減去目標日期,得到idxmin
tmp = df.loc[df.category.eq(3)]
(tmp.date - pd.to_datetime("2000-01-02")).abs().idxmin()
# 5
uj5u.com熱心網友回復:
要獲得類別 3 的(第一個)最接近的索引日期,您可以使用:
m = df['category'].eq(3)
d = df['date'].sub(pd.Timestamp('2000-01-02')).abs()
d.loc[m].idxmin()
輸出:5
uj5u.com熱心網友回復:
df[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))]
要獲取所有索引的串列:
df.index[(df['category']==3) & (df['date']==pd.Timestamp(2000,1,2))].tolist()
好的 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467772.html
