Настройка
np.random.seed(0) # Add seed to reproduce results.
df = pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
df['id'] = ['CA', 'CA', 'CA', 'FL', 'FL', 'FL']
df['technique'] = ['one', 'two', 'three', 'one', 'two', 'three']
Вы можете melt
, сортировать по sort_values
и удалять дубликаты, используя drop_duplicates
:
(df.melt(['id', 'technique'])
.sort_values(['id', 'value'], ascending=[True, False])
.drop_duplicates('id')
.drop('value', 1)
.reset_index(drop=True)
.rename({'variable': 'highest_prob'}, axis=1))
id technique highest_prob
0 CA one D
1 FL two A
Другим решением является использование melt
и groupby
:
v = df.melt(['id', 'technique'])
(v.iloc[v.groupby('id').value.idxmax()]
.drop('value', 1)
.reset_index(drop=True)
.rename({'variable': 'highest_prob'}, axis=1))
id technique highest_prob
0 CA one D
1 FL two A