Как рассчитать второе по величине значение и добавить еще один столбец для него в Pandas Python

Это должно сделать трюк, data - ваш исходный словарь, result - ну, вы догадались правильно =)

def convert_to_float(num) :
    try :
        num = float(num)
    except ValueError :
        pass
    return num

result = { convert_to_float(k) : convert_to_float(v) for k,v in data.items() }
-1
задан john doe 19 January 2019 в 05:37
поделиться

2 ответа

IIUC вам нужно:

df.merge(df.groupby('id')['c1'].apply(lambda x : x.max()).reset_index().rename(columns={'c1':'c1_secondLargest'}),on='id')

или:

print(df.merge(df.groupby('id')['c1'].apply(lambda x : x.nlargest(1)).reset_index().rename(columns={'c1':'c1_secondLargest'}).drop('level_1',axis=1),on='id'))


   id  c1  c1_secondLargest
0   1   3                75
1   1  34                75
2   1  75                75
3   2  84                96
4   2  54                96
5   2  23                96
6   2  96                96
7   3  55                76
8   3  76                76
0
ответ дан anky_91 19 January 2019 в 05:37
поделиться

Используя nth + sort_values

df['second_largest'] = df.sort_values(by='c1').groupby('id').transform('nth', -2)

   id  c1  second_largest
0   1   3              34
1   1  34              34
2   1  75              34
3   2  84              84
4   2  54              84
5   2  23              84
6   2  96              84
7   3  55              55
8   3  76              55

Индексное выравнивание берет полученную серию и помещает ее обратно в исходный фрейм данных.

0
ответ дан user3483203 19 January 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: