2015-02-07 85 views
1

我有以下数据框:如何确定大熊猫特定记录的行数据帧

data = {'level1':[20,19,20,21,25,29,30,31,30,29,31], 
     'level2': [10,10,20,20,20,10,10,20,20,10,10]} 
index = pd.date_range('12/1/2014', periods=11) 
frame = pd.DataFrame(data, index=index) 

In [75]: frame 
Out[75]: 
level1 level2 
2014-12-01 20 10 
2014-12-02 19 10 
2014-12-03 20 20 
2014-12-04 21 20 
2014-12-05 25 20 
2014-12-06 29 10 
2014-12-07 30 10 
2014-12-08 31 20 
2014-12-09 30 20 
2014-12-10 29 10 
2014-12-11 31 10 

我想借一本框架的“细胞”,并找出它是在哪一行。

换句话说,frame.level1[4]."rownumber"()

什么是整数行号?想要的答案是4

注意:我知道这是循环的,最终目标是将其放入公式中,以便使用相对导航来获取另一个“单元格”。

#pseudocode 
def rowgetter(x) 
    priorvalue =frame.at[index[rownumber(x)-1],'level1']#pseudocode 
    priorvalue += 10 #or something 

and then 
rownmums=frame.level1.map(rowgetter) 

结果会是什么样子

nan(?) 
30 
29 
30 
31 
35 
39 
40 
41 
40 
39 

我之所以这么问,这是我不能get shift to work in a formula,但即使在链接的问题的答案,我觉得这问题本身就很有趣。

回答

0

你可以使用argwhere

In [11]: np.argwhere((frame.level1 == 25).values)[0][0] 
Out[11]: 4 

argmax

In [12]: np.argmax((frame.level1 == 25).values) 
Out[12]: 4 

注意:如果没有找到匹配,这将不会提高,但你可以在一些检查包装它(即在这个位置的价值是25)。

我不认为有一种方法来查找不==特定值(我想这是类似于this question

+0

感谢安迪,但我需要的是略有不同,我不打算传递实际值(例如25),但数据框架元素,并在一个函数内,我补充说,这个问题,也许它不清楚,另一个问题是,我的价值观不是唯一的,所以我不能看在我的示例中为值30设置唯一行(因为它在frame.level1中是两次) – 2015-02-07 18:21:25