2017-04-11 101 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