我正在使用看起来像这样的数据框。
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
答案 0 :(得分:7)
groupby('id')
并使用idxmin
查找'time'
的最小值的位置。最后,使用loc
分配np.nan
df.loc[df.groupby('id').time.idxmin(), 'diff'] = np.nan
df
答案 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