Pandas найдите минимальное значение в определенном столбце в нескольких строках

Итак, у меня есть этот фрейм данных (отображается только его часть)


    name    CEMS    emit    consent
    Ht      CEMS-4  61      50
    Ht      CEMS-5  33.75   50
    Ld      CEMS-1  21.625  100
    Sh      CEMS-3  71.4    100

Теперь мне нужно найти среднее значение излучения, а затем вычесть его из согласия конкретного CEMS.

Что я делаю


    mod = df.consent.iloc[0]
    eMean = df['emit'].mean()
    eMean = ("%.2f" % eMean)
    diff1 = eMean - mod
    diff = float(diff1)/float(mod)

и я получаю эту ошибку


    diff1 = eMean - mod
    TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('S21') dtype('S21') dtype('S21')

Помогите мне в этом, пожалуйста

Что такое print (df.dtypes)?

jezrael 10.09.2018 08:56

Вы пытаетесь вычесть из строки значение с плавающей запятой. Не выполняйте приведение строк (eMean = ("%.2f" % eMean)), и все будет в порядке

Plasma 10.09.2018 08:56

И какой ожидается выход?

jezrael 10.09.2018 08:58

@jezrael Как видите, я пытаюсь сделать diff = float (diff1) / float (mod), чтобы я мог выполнять дальнейшие операции, поэтому я действительно не знаю, как сказать вам ожидаемый результат

Abhishek2332 10.09.2018 09:04

@ Abhishek2332 - Мое решение, опубликованное как ответ, работает? Или какая-то ошибка?

jezrael 10.09.2018 09:04

@jezrael да, это сработало. Спасибо

Abhishek2332 10.09.2018 11:00
1
6
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что нужно удалить присвоение переменной eMean в eMean = ("%.2f" % eMean) и, если необходимо, привести значения к поплавкам:

mod = float(df.consent.iloc[0])
eMean = df['emit'].astype(float).mean()
print ("%.2f" % eMean)
diff1 = eMean - mod
diff = diff1 / mod

Другие вопросы по теме