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

2024-09-25 04:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的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)

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 

如何获取df['diff_min_firmcode']


Tags: dfindexdiff公司minyearroaindcode
1条回答
网友
1楼 · 发布于 2024-09-25 04:33:18

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

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

相关问题 更多 >