Панды выбирают строку с максимальным значением в каждой группеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Панды выбирают строку с максимальным значением в каждой группе

Сообщение Anonymous »

У меня есть задание, связанное с выбором функций.
После кластеризации функций по «расстоянию корреляции» друг от друга мне теперь нужно выбрать из каждого кластера только функцию с наилучшей корреляцией с целью. .
Я выполняю этот шаг выбора объектов после того, как уже отфильтровал 100 объектов, поэтому я распределяю объекты по 30 кластерам.

Код: Выделить всё

from scipy.cluster.hierarchy import linkage, fcluster
from scipy.spatial.distance import pdist

corr_matrix = df_top_100.corr().abs()
distance_matrix = 1 - corr_matrix
Z = linkage(pdist(distance_matrix), method='ward')
clusters = fcluster(Z, t=30, criterion='maxclust')
clustered_features = pd.DataFrame({'feature': df_top_100.columns, 'cluster': clusters})
clustered_features.sort_values(by='cluster')

Код: Выделить всё

    feature    cluster
0   m2512.82    1
1   m2514.75    1
2   m2516.68    1
3   m2510.89    1
4   m2518.61    1
... ...         ...
28  m1056.81    26
19  m1064.53    27
22  m1066.45    28
18  m1062.6     29
20  m1060.67    30
100 rows × 2 columns
После кластеризации я добавляю корреляцию с целью для каждой функции:

Код: Выделить всё

clustered_features['corr_with_SOC'] = clustered_features['feature'].map(df[top_100_features].corrwith(df['SOC']))

Код: Выделить всё

    feature     cluster corr_with_SOC
0   m2512.82    1       0.633739
1   m2514.75    1       0.633690
2   m2516.68    1       0.633343
3   m2510.89    1       0.633246
4   m2518.61    1       0.632762
... ...         ...     ...
28  m1056.81    26      0.603756
19  m1064.53    27      0.611138
22  m1066.45    28      0.609888
18  m1062.6     29      0.611323
20  m1060.67    30      0.610205
100 rows × 3 columns
По сути, мне нужен первый экземпляр каждой группы из вывода этой команды:

Код: Выделить всё

clustered_features.sort_values(by=['cluster', 'corr with SOC'], ascending=[True, False])
Я знаю, что мне нужно использовать df.groupby('cluster'), но не могу понять, как выполнить максимальную агрегацию для использования фильтр по кадру данных, и кажется, что в документации pandas говорится только о более простых примерах.


Подробнее здесь: https://stackoverflow.com/questions/793 ... each-group
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»