Отсортировать groupby
Нужно отсортировать по столбцу score и оставить топ 3 лучших результата sys_numb для каждого chb.
d1 = {"chb":np.array(['1', '1', '2', '2', '2','3']), "sys_numb": np.array(['5', '15', '7', '9', '20', '25']), "score": np.array([.3, .13, .33, .21, .44, .22])}
d2 = {"chb":np.array(['1', '1', '2', '2', '2','3']), "sys_numb": np.array(['10', '12', '7', '9', '16', '17']), "score": np.array([.10, .12, .7, .78, .733, .123])}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
df3 = pd.concat([df1, df2]).groupby(by = ['chb','sys_numb']).sum()
Ответы (1 шт):
Автор решения: D.Vinogradov
→ Ссылка
Можно попробовать такой вариант:
здесь оставляем как у вас есть
d1 = {"chb":np.array(['1', '1', '2', '2', '2','3']), "sys_numb": np.array(['5', '15', '7', '9', '20', '25']), "score": np.array([.3, .13, .33, .21, .44, .22])}
d2 = {"chb":np.array(['1', '1', '2', '2', '2','3']), "sys_numb": np.array(['10', '12', '7', '9', '16', '17']), "score": np.array([.10, .12, .7, .78, .733, .123])}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
df3 = pd.concat([df1, df2]).groupby(by = ['chb','sys_numb']).sum()
далее:
new_df = df3.sort_values('score').groupby(level=0).tail(3).sort_index().reset_index()
>>> new_df
chb sys_numb score
0 1 12 0.120
1 1 15 0.130
2 1 5 0.300
3 2 16 0.733
4 2 7 1.030
5 2 9 0.990
6 3 17 0.123
в tail вставляем нужное значение (количество топа)
