2016-09-06 6 views
4

私はこのようなデータフレームを扱っています。データフレームの行を繰り返し、グループごとに最小値を再割り当て

id time diff 
0 0 34 nan 
1 0 36 2 
2 1 43 7 
3 1 55 12 
4 1 59 4 
5 2 2 -57 
6 2 10 8 

効率的な方法は、それらの最小値でNaNに「差分」を設定し、その後、IDによる「時間」の最小値を見つけることは何ですか。私は、その結果解決策を探しています:

id time diff 
0 0 34 nan 
1 0 36 2 
2 1 43 nan 
3 1 55 12 
4 1 59 4 
5 2 2 nan 
6 2 10 8 
+1

感謝を割り当てることlocを使用しますが、私はまだあなたが何をしようとして理解していません。最小値をidで求め、それらをnansに設定しますか?なぜ、id = 1ではなく、4ではなく、7に設定されていますか? – benten

+1

私はIDのグループごとの時間が最小のアイテムをナノに設定しようとしています。 –

答えて

6

groupby('id')'time'の最小値の位置を見つけるために、idxminを使用する:対応する行にNaNを割り当てる論理ベクトル。最後に、例を投稿するためのnp.nan

df.loc[df.groupby('id').time.idxmin(), 'diff'] = np.nan 
df 

enter image description here

4

あなたがIDを有するグループの時間をすることができますし、時間がグループ内で最小である場合、値がTrueの論理ベクトルを計算し、Falseの他、および使用します

import numpy as np 
import pandas as pd 
df.loc[df.groupby('id')['time'].apply(lambda g: g == min(g)), "diff"] = np.nan 

df 
# id time diff 
#0 0  34 NaN 
#1 0  36 2.0 
#2 1  43 NaN 
#3 1  55 12.0 
#4 1  59 4.0 
#5 2  2 NaN 
#6 2  10 8.0 
関連する問題