遍历数据帧的行并按组重新分配最小值

时间:2016-09-06 01:24:38

标签: python pandas dataframe group-by pandas-groupby

我正在使用看起来像这样的数据框。

  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

找到' time'的最小值的有效方法是什么?通过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

2 个答案:

答案 0 :(得分:7)

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

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

enter image description here

答案 1 :(得分:4)

您可以按时间对时间进行分组并计算逻辑向量,如果时间在组内最小,则值为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