2016-09-06 20 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 

什麼是有效的方法通過id找到'time'的最小值,然後在這些最小值處將'diff'設置爲nan。我在尋找,結果在一個解決方案:

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

感謝張貼的例子,但我還是不明白你想要做什麼。通過id找到最小值並將它們設置爲nans?爲什麼然後是7設置爲南爲id = 1而不是4? – benten

+1

我正在嘗試將每個組的id的最少時間設置爲nan。 –

回答

6

groupby('id')並使用idxmin找到'time'最小值的位置。最後,使用loc分配np.nan

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

enter image description here

4

您可以按ID的時間和計算邏輯向量,如果時間是組內最低,值爲True,否則返回False,並使用邏輯矢量分配NaN到對應的行:

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