2017-04-11 161 views
0

我想从刚好在它上面的值中减去DataFrame中列的最小值。在R我这样做:在大熊猫中减去先前值的最小值DataFrame

df <- data.frame(a=1:5, b=c(5,6,7,4,9)) 
df 
    a b 
1 1 5 
2 2 6 
3 3 7 
4 4 4 
5 5 9 
df$b[which.min(df$b)-1] - df$b[which.min(df$b)] 
[1] 3 

我怎样才能做到同样的事情在pandas?更一般地说,我怎样才能提取一个pandas数据框中的行号满足某些条件?

回答

2

您可以使用argmin找出最小值的索引(第一个,如果有关系),那么你可以根据位置做减法:

index = df.b.argmin() 
df.b[index-1] - df.b[index] 
# 3 

万一指数不连续的数字:

i_index = df.b.values.argmin() 
df.b.iat[i_index-1] - df.b.iat[i_index] 
# 3 

或者效率较低:

-df.b.diff()[df.b.argmin()] 
# 3.0 
+0

你也可以使用'pandas.Da taFrame.idxmin()'任何想法哪个更好? – Chuck

+0

@CharlesMorris对。不是一个正式的答案,但我不认为'idxmin'和'argmin'性能方面有很大的区别。 – Psidom

+1

@CharlesMorris'argmin'特别是'Index'方法,'idxmin'可用于'Series','DataFrame's和'groupby'对象 – EdChum