Python добавить функцию, которая проходит по полю - PullRequest
0 голосов
/ 24 апреля 2020

В Excel я использовал расчет, как показано ниже: 0,16667 * 10 ^ ((C15-121.1) / 10). Расчет сделан на D14.

Фрейм данных

На рисунке я хочу сделать для столбца «0» индекса 0 следующий расчет: = 0,16667 * 10 ^ (( 91,03 -121,1) / 10). Это означает, что температура в индексе 1 используется для вычисления для столбца «0» в индексе 0. Это должно быть так для всего столбца

Дальнейшее объяснение:

    Temp     Calculation
0   90.01    0.16667*10^((91.03-121.1)/10)
1   91.03    0.16667*10^((95.06-121.1)/10)
2   95.06    0.16667*10^((100.07-121.1)/10)
3   100.07   0.16667*10^((103.00-121.1)/10)
4   103.00

Так посмотрите на расчет в DF. временные значения в расчете на одну температуру выше текущего индекса

РЕДАКТИРОВАТЬ:

List1= [90.01, 91.03, 95.06, 100.07, 103.50]

test = pd.DataFrame(List1, columns=["Temp"])

, затем я хочу добавить вычисление:

test["calculation"] = 0.16667*10^((test["Temp"][1:]-121.1)/10)

это дает следующее ошибка:

TypeError: Cannot perform 'rxor' with a dtyped [float64] array and scalar of type [bool]

РЕДАКТИРОВАТЬ 2:

test["calculation"] = 0.16667*10**((test["Temp"][1:]-121.1)/10).reset_index()


test returns:

    Temp    calculation
0   90.01   1.6667
1   91.03   16.6670
2   95.06   166.6700
3   100.07  1666.7000
4   103.50  NaN

Способ расчета хорош. Но результат другой. когда температура равна 100,07, результат должен быть 0,001314. см. ниже:

test2 = 0.16667*10**((100.07-121.1)/10)

out: 0.0013147931580348442

1 Ответ

1 голос
/ 24 апреля 2020

Вы можете ссылаться на целые столбцы в фреймах данных и выполнять любые вычисления на них, как хотите.

df["answer"] = 0.16667*10**((df["Temp"]-121.1)/10)

РЕДАКТИРОВАТЬ:

Теперь я понимаю, что вы хотите использовать следующую строку для расчета текущий ряд; Вы можете обрабатывать серии pandas как списки и индексировать их как таковые, например, [1:]

df["calculation"] = 0.16667*10**((df["Temp"][1:]-121.1)/10).reset_index()

Это оставит последнее место в столбце расчета как NaN, но вы можете изменить это вручную, если вы wi sh впоследствии.

EDIT2: контроль, ^ равен xor в python, ** соответствует мощности. Требуется .reset_index (), так как иначе смещение будет в начале, а не в конце кадра данных

EDIT3:

Используя код

test["calculation"] = 0.16667*10**((test["Temp"][1:]-121.1)/10).reset_index(drop=True)

, я получаю результат

     Temp  calculation
0   90.01     0.000164
1   91.03     0.000415
2   95.06     0.001315
3  100.07     0.002896
4  103.50          NaN
...