Две вещи замедляют ваш код:
.apply
с вашей собственной определенной функцией. Вы можете оптимизировать решение с помощью векторизованных методов pandas
и numpys
:
Решение: (я не использовал ваш класс в этом случае)
# Print the DataFrame we start with provided by OP
print(df)
DX1 DX2 DX3 DX4 HeartFailure
0 10R46 R*1005 8017 2 0
1 10R46 R*10335 5019 2 0
2 100R91 R*1005 8017 1 0
3 10R91 R*243 8870 1 0
4 10M95 R*4918 8305 3 0
5 10M95 R*9017 8305 3 0
6 10M95 R*9470 8221 3 0
# Create new optimized function
def defineComplicationsFeatures(df):
col_to_update = 'HeartFailure'
strings_to_search = ['80', 'R*1']
for string in strings_to_search:
mask = np.column_stack([df[col].str.startswith(string, na=False) for col in df.iloc[:, :-1]]).any(axis=1)
df[col_to_update] = np.where(mask, 1, 0)
return df
df_new = defineComplicationsFeatures(df)
print(df_new)
DX1 DX2 DX3 DX4 HeartFailure
0 10R46 R*1005 8017 2 1
1 10R46 R*10335 5019 2 1
2 100R91 R*1005 8017 1 1
3 10R91 R*243 8870 1 0
4 10M95 R*4918 8305 3 0
5 10M95 R*9017 8305 3 0
6 10M95 R*9470 8221 3 0
Примечание Вы можете передавать col_to_update
& amp; strings_to_search
к аргументам функции, которая делает его немного чище, я выбрал не для простоты прямо сейчас.
Если они предназначены, чтобы быть отдельными значениями, попробуйте это:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
, Если они предназначены, чтобы быть единственным значением (как на французском языке, где половина записана 0,5)
var value = parseFloat("554,20".replace(",", "."));
Замените запятую точкой.
Это только возвратится 554:
var value = parseFloat("554,20")
Это возвратится 554.20:
var value = parseFloat("554.20")
Так в конце, можно просто использовать:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
не забывают, что parseInt()
должен только использоваться для парсинга целых чисел (никакие плавающие точки). В Вашем случае это только возвратится 554. Кроме того, вызов parseInt () на плавании не будет вокруг числа: это возьмет свой пол (самое близкое более низкое целое число).
Расширенный пример для ответа на вопрос Pedro Ferreira из комментариев:
, Если текстовое поле содержит тысячи точек разделителя как в 1.234.567,99
, они могли бы быть устранены заранее с другим replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))