2017-04-11 16 views
0

DataFrameの列の最小値をそのすぐ上の値から差し引きたい。pandasの前の値から最小値を引く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で同じことを行うことができます:Rで私はこれを行うだろうか?より一般的には、特定の条件が満たされているpandas DataFrameで行番号を抽出するにはどうすればよいですか?

(絆がある場合は最初の1)あなたは最小値のインデックスを見つけるために argminを使用することができます

答えて

2

、その後は場所に基づいて減算を行うことができます。

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() '誰か良いアイデアはありますか? @CharlesMorris右。 – Chuck

+0

正式な答えではありませんが、私は 'idxmin'と' argmin'のパフォーマンス面で大きな違いはないと思います。 – Psidom

+1

@CharlesMorris 'argmin'は、特に' Index'メソッドです。 'idxmin'は' Series'、 'DataFrame'と' groupby'オブジェクトで利用可能です – EdChum

関連する問題