2016-11-18 27 views
1

我已經展示了下面如何指數上的值小於某一規定值

d = {'one': [1., 2., 3., 4.,5.,6], 'two': [4., 3., 2., 1.,-1,-2]} 
df = pd.DataFrame(d, index=['201305', '201305', '201307', '201307', '201307','201308']) 

一個數據幀時,我得到了一個字符串‘201307’,我想獲得比該給定的字符串少的最後一個值‘201307’'201305'

如何編寫代碼。

回答

1

使用Index.drop_duplicates下降重複條目,並保持它只是結合遇到與Index.get_loc的第一項獲得給定的標籤的整數位置作爲面膜使用。從它中扣除1以獲得它獨特的以前的標籤。

>>> idx = df.index.drop_duplicates() 
>>> val = idx[idx.get_loc('201307') - 1] # <------ Insert query here 
>>> val 
'201305' 

如果你想給定index字符串值之前得到最後一行:

>>> df.loc[val].iloc[-1] 
one 2.0 
two 3.0 
Name: 201305, dtype: float64 

使用ARG method=bfill/backfill處理不存在匹配。它會立即爲這種情況提供下一個匹配的索引值。

>>> val = idx[idx.get_loc('201306', method='bfill') - 1] # Here, '201307' is selected 
>>> val 
'201305' 
+1

,你的回答正是我想要的。謝謝很多。 – inaMinute

+0

請問,如果給定的字符串是'201306',如何獲得'201305' – inaMinute

+0

更新。請檢查。 –

1

首先,數字以字符串形式存儲時,不要使用字符串。數字計算比字符串計算快得多。其次,這是一個容易解決的問題。簡單排序的指標,並檢查:

df.index = df.index.astype(int) 
df.sort_index(inplace=True) 
df[df.index < int(given_value)].iloc[-1, :] 
+0

我真的很感激你的第一個建議。但是,我更喜歡Nickil Maveli對第二個問題的回答。非常感謝。 – inaMinute

相關問題