Я пытаюсь преобразовать код perl в python для простого умножения столбцов на некоторые константы. Я создал pandas dataframe с несколькими столбцами значений с плавающей точкой. Вот пример файла component.csv.
NA MULT NOA NOB CHARGE EX
0 8.0 1.0 24.0 24.0 0.0 1.0
1 8.0 1.0 24.0 24.0 0.0 1.0
2 8.0 1.0 6.0 6.0 0.0 1.0
3 20.0 1.0 18.0 18.0 0.0 1.0
4 23.0 1.0 21.0 21.0 0.0 1.0
5 26.0 1.0 24.0 24.0 0.0 1.0
6 11.0 1.0 13.0 13.0 0.0 0.0
7 16.0 1.0 19.0 19.0 1.0 0.0
8 1.0 1.0 4.0 4.0 -1.0 0.0
9 17.0 1.0 23.0 23.0 0.0 0.0
10 1.0 1.0 4.0 4.0 0.0 0.0
11 1.0 1.0 4.0 4.0 0.0 0.0
Исходные параметры:
$A1 = 9.3692400791;
$A2 = 9.4492960287;
$B = 3.8320915550;
$C = 9.5936653352;
$D = 1.8739215238;
$E = 2.4908584058;
Ожидаемый вывод - один столбец (d5):
Df5
-0.2249
-0.2249
-0.0562
-0.1686
-0.1968
-0.2249
-0.1218
-0.1780
-0.0384
-0.2155
-0.0375
-0.0375
После анализа в кадре данных с помощью:
pd.set_option('precision', 8)
df = pd.read_csv("unscaled_components_delimit.csv", delimiter= ",", header=0)
У меня есть несколько условий для проверки, например, следующий скрипт:
if (df['NA'] > 1).any():
print(True)
elif (df['NA'] == 1).any():
print(False)
Однако приведенный выше код,печатает только одно значение True, хотя в столбце с заголовком NA есть несколько значений 1.0, это означает, что оно не передается второму elif. Я использовал функцию any (), и, возможно, следует использовать другую функцию, о которой я сейчас не знаю. Следовательно, кто-то может предложить решение для этого?
Цель состоит в том, чтобы сравнить каждый элемент столбца (заголовок NA) с номером 1 (большим или равным). Затем выполните некоторые действия с другими условиями для других столбцов.
Буду признателен за любую помощь или предложение.
Для большей ясности следующий код содержит окончательный требуемый код со всеми необходимымиусловия:
if (df['NA'] > 1).any():
if (df['MULT'] == 1).any():
if ((df['NOB'] != 1).any() or (df['NOB'] ==1).any()):
d5 = -A1*df['NOB']
elif((df['NOB'] == 1).any()):
d5 = -E*df['NOB']
else:
d5 = -A2*df['NOB'] - B*(df['NOA']-df['NOB'])
elif (df['NA'] == 1).any():
if (df['MULT'] == 1).any():
if ((df['EX'] == 0).any() and (df['NOB'] == 4).any() and (df['CHARGE'] == 0).any()):
d5 = -A1*df['NOB']
elif((df['NOB'] != 1).any() or ((df['NOB'] == 1).any() and (df['EX'] != 0).any() )):
d5 = -C*df['NOB']
elif((df['NOB'] == 1).any() and (df['EX'] == 0).any()):
d5 = -E*df['NOB']
else:
d5 = -C*df['NOB'] - D*(df['NOA']-df['NOB'])
Исходный код perl следующий ($ nh не требуется, hlc в perl - это d5 в python):
if ($na > 1) {
if ($mult == 1) {
if (($nob != 1) || (($nob == 1) && ($nh != 0))) {
$hlc = -$A1 * $nob;
}
elsif (($nob == 1) && ($nh == 0)) {
$hlc = -$E *$nob;
}
}
else {
$hlc = -$A2 * $nob - $B * ($noa - $nob);
}
}
### HLC for atomic species ###
elsif ($na == 1) {
if ($mult == 1) {
if (($ex == 0) && ($nob == 4) && ($charge == 0)) {
$hlc = -$A1 * $nob;
}
elsif (($nob != 1) || (($nob == 1) && ($ex != 0))) {
$hlc = -$C * $nob;
}
elsif (($nob == 1) && ($ex == 0)) {
$hlc = -$E *$nob;
}
}
else {
$hlc = -$C * $nob - $D * ($noa - $nob);
}
}