Python 我希望找到组内的最小差异并返回索引

Python 我希望找到组内的最小差异并返回索引,python,pandas,Python,Pandas,这是我的df index firmcode year indcode ROA 0 a 2006 03 0.1 1 b 2006 03 0.2 2 c 2006 03 0.4 3 d 2006 03 0.7 4 e 2

这是我的df

index   firmcode    year    indcode     ROA
  0      a         2006      03         0.1
  1      b         2006      03         0.2
  2      c         2006      03         0.4
  3      d         2006      03         0.7   
  4      e         2006      07         0.3
  5      f         2006      07         0.8
  6      g         2006      07         1.1
  7      h         2006      07         2.1
我希望它是如下(除了同一家公司)。 这是与最近的公司匹配的ROA(在同一年,相同的indcode)


如何获得
df['diff\u min\u firmcode']
列?

一个想法是使用自定义函数减去每组的每个值
ROA
,将
NaN
s设置为对角线以省略同一公司,然后使用:


它工作得很好!!你非常善良和聪明!我希望你很快会有好事情发生。非常感谢。
index   firmcode    year    indcode     ROA   diff_min_firmcode
  0      a         2006      03         0.1         b  
  1      b         2006      03         0.2         a
  2      c         2006      03         0.4         b          
  3      d         2006      03         0.7         c
  4      e         2006      07         0.3         f 
  5      f         2006      07         0.8         g 
  6      g         2006      07         1.1         f
  7      h         2006      07         2.1         g 
def f(x):
    y = x['ROA'].to_numpy()
    arr = np.abs(y - y[:, None])
    np.fill_diagonal(arr, np.nan)
    z = pd.DataFrame(arr, index=x['firmcode'], columns=x.index)
    return z.idxmin()

df['diff_min_firmcode'] = df.groupby(['year','indcode'], group_keys=False).apply(f)

print (df)
  firmcode  year  indcode  ROA diff_min_firmcode
0        a  2006        3  0.1                 b
1        b  2006        3  0.2                 a
2        c  2006        3  0.4                 b
3        d  2006        3  0.7                 c
4        e  2006        7  0.3                 f
5        f  2006        7  0.8                 g
6        g  2006        7  1.1                 f
7        h  2006        7  2.1                 g