Python 我希望找到组内的最小差异并返回索引
这是我的dfPython 我希望找到组内的最小差异并返回索引,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
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