2016-11-18 26 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

相关问题