• Сколько комбинаций из цифр 5678?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вы имеете ввиду сколько перестановок возможно без замены то есть если я использовал например 8 то все я не могу использовать 8 снова. Логика следующая у вас есть 4 позиции _,_,_,_ на первую вы можете сколько вариантов подставить вы имеете на выбор 5, 6, 7, 8 то есть 4. Вы имеете 4,_,_,_. Теперь выбираете из 3 чисел. 4,3,_,_ и по той же логике получаете 4*3*2*1.
    Ответ написан
    Комментировать
  • Как заменить pandas.append на pandas.concat?

    Maksim_64
    @Maksim_64
    Data Analyst
    Сначала собираете все датафреймы в отдельный лист, затем конкатенируете и все. По вашему коду должно быть как то так. Протестировать то код я не могу возможно где то опечатки. Собираете фреймы в лист в цикле, а затем за пределами цикла конкатенируете в общий фрейм и вне цикла записываете в файл.
    import io
    import pandas as pd
    
    
    excel_file = io.BytesIO()
    excel_file.name = "table_excel.xlsx"
    all_frames = []
    for history in ads:
        item_title = history.get("item_title")
        item_price = history.get("item_price")
        current_df = pd.DataFrame(
            {
                "Имя": [item_title],
                "Цена": [item_price],
            }
        )
        all_frames.append(currend_df)
    final_df = pd.concat(all_frames, ignore_index=True)
    
    final_df.to_excel(excel_file, encoding="utf-8", index=False)
    Ответ написан
  • Как сделать так, чтобы бот отправлял текст в таком формате который я ему отправляю?

    Maksim_64
    @Maksim_64
    Data Analyst
    Первое вам нужно отформатировать message.caption, строка которая там будет содержаться должна иметь вид
    "*жирный*" То есть вам в вашей строке нужно обернуть слово или всю строку *текст*.
    Второе это поставить параметр parse_mode = 'Markdown'
    Ответ написан
  • Почему считает не все символы?

    Maksim_64
    @Maksim_64
    Data Analyst
    где у вас print(a) вставьте вот этот код, вы выводите на печать длину массива, а нужно суммировать длины строк каждого элемента массива.
    print(sum(len(i) for i in a))
    Ответ написан
    Комментировать
  • Почему функция y=x^x начинает возрастать, начиная с аргумента 1/e?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что точка (1/e, f(1/e)), это критическая точка. Критическая точкой называется точки где функция либо не дифференцируема, либо производная функции равна нулю.
    Соответственно наша функция, y = x^x, ее производная будет x^x*(ln(x) + 1). далее приравниваем производную к нулю x^x*(ln(x) + 1) = 0 и решаем для x. Решением данного уравнения будет 1/e Подставляем 1/e в исходное функцию и получаем это вы уже нашли округленно 0.692. (1/e,0.692) - Критическая точка. А в критических точках функция меняет свое направление, то есть если до этого шла на убавление проходя через критическую точку она пойдет на возрастание и наоборот.
    И так ответ Потому что (1/e, f(1/e)) Является критической точкой.
    Также далее посредством тестов можно найти является ли критическая точка локальным минимумом или максимум в нашем случае глобальным потому что она одна. В данном случае тест легко покажет что это точка глобальный минимум. А минимум слева убывает проходит через критическую точку и начинает возрастать.
    ДОПОЛНЕНИЕ К ответу.
    Выходит, что до 1/e функция убывает, а после - возрастает. Откуда берется такая связь?

    Здесь дело в том что данная критическая точка как указал выше является минимумом в контексте вашего вопроса даже не важно глобальным или локальным. Что бы критическая точка называлась минимум производная функции должна быть отрицательной слева от критической точки и положительной справа от критической точки если подставим в производную (ее я привел в самом начале) число не много меньшее чем критическая точка то мы получим отрицательное значение (что значит функция убывает) а если не много большее то положительное значит (функция возрастает). Поскольку функция убывает слева от критической точки и возрастает после нее это и есть определение минимума. Мы сейчас математическим методом нашли минимум. То есть ваша функция убывает до критической точки и возрастает после нее. Потому что точка является минимумом (в данном случае глобальным). Так будет не много точнее.
    Ответ написан
    Комментировать
  • Какое "time complexity" имеет операция list[element]?

    Maksim_64
    @Maksim_64
    Data Analyst
    Программа выполнится с 0(1), никакого чтения всего листа не произойдет. Потому что все вы делаете это получаете элемент по индексу. Например если изменить немножко вопрос скажем у нас есть список и словарь.
    'B' in ['A', 'B','C'] Вот это операция будет O(n)
    В то время как
    'B' in {'A':1,'B':2,'C':3}
    останется O(1).
    Ну и напоследок если список отсортирован и python знает что он отсортирован то проверка на наличие элемнта в списке будет тоже O(1).

    ОТРЕДАКТИРОВАНО
    Ну и напоследок если список отсортирован и python знает что он отсортирован то проверка на наличие элемнта в списке будет тоже O(1).

    Это утверждение абсолютно неверно. На мою ошибку указал Roman K В комментарии к моему ответу.
    Ответ написан
    5 комментариев
  • Как обратиться к элементу json?

    Maksim_64
    @Maksim_64
    Data Analyst
    id_key = list(parsed_app_json.keys())[0]
    print(parsed_app_json[id_key]['data']['name'])

    В id_key будет всегда попадать первый ключ, соответственно вы сможете обращаться к ключу name независимо от значения первого ключа.
    Ответ написан
  • Возможно ли requests сохранять вкладку включенной?

    Maksim_64
    @Maksim_64
    Data Analyst
    Да возможно.
    session = requests.Session()
    Ответ написан
    Комментировать
  • Pandas: Как вернуть один столбец из двух переданных в DataFrame.apply()?

    Maksim_64
    @Maksim_64
    Data Analyst
    Первое что бы получить mean по группам для этого в pandas есть мощный инструмент groupby
    например в вашем случае
    means = data.groupby('Социальный класс').mean()
    Это даст вам датафрейм где вы на группе запустили аггрегирующуюю функцию (можно не одну)
    теперь к ответу на вопрос все решается в одну строчку
    data["Возраст"] = data.groupby("Социальный класс").transform(lambda x: x.fillna(x.mean()))

    все этот код решит ваш вопрос, для его лучшего понимания (очень рекомендую) разберитесь как следует с groupby это очень частая проблема.
    Ответ написан
    4 комментария
  • (telegram aiogram)Выдает ошибку NameError: name 'time' is not defined?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну вы нигде не импортировали функцию time по этому и выдает ошибку.
    вначале файла импортируйте ее.
    from datetime import time
    Но судя по коду который у вас написан, появятся другие ошибки. Связанные с функцией time.
    Ответ написан
  • Как изменить элемент одного списка, который равен другому списку?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну код ваш совсем не рабочий, первое отступы (у вас 8 должно быть 4), второе new_pole вы должны объявить до цикла, до присваивания в цикле дело не дойдет когда new_pole[i_col][i_row] python выдаст ошибку уже вот здесь что не знает что такое new_pole.
    Теперь ответ на ваш вопрос, Когда вы делаете что то типа
    list1 = [1,2,3]
    new_list = list1

    вы не создаете два объекта вы создаете две ссылки на один и и тот же объект [1,2,3]. И скажем если вы сделаете
    list1.append(4) У вас будут изменения и в new_list. Потому что объект всего один а ссылки на него две.
    Что бы избежать это нужно использовать deepcopy
    Вот ваш код но в рабочей версии.
    from copy import deepcopy
    pole = [['x', 'x', 'x', '.'], ['.', '.', '.', '.'], ['x', '.', 'x', 'x'], ['x', '.', '.', '.']]
    new_pole = deepcopy(pole)
    for i_row in range(len(pole)):
        for i_col in range(len(pole[i_row])):
            new_pole[i_col][i_row] = pole[i_row][i_col]
    print(pole)
    print(new_pole)
    Ответ написан
    1 комментарий
  • Как получить PNG из NumPy array без сохранения?

    Maksim_64
    @Maksim_64
    Data Analyst
    PIL.Image.Open() это для открытия файлов. То что вы спрашиваете должно звучать так как конвертировать numpy массив в PIL.Image объект. Для это существует метод PIL.Image.fromarray(array), Возможно придется сделать rehape у массива, возможно придется задать какие то дополнительные параметры у метода fromarray. Но ваш вопрос решается этим методом.
    Ответ написан
    2 комментария
  • Как в Scrapy сохранить результат в JSON при запуске из скрипта?

    Maksim_64
    @Maksim_64
    Data Analyst
    нужно добавить в settings.py он должен был создаться в вашем scrapy проекте.
    FEEDS = {
        'filename.json': {'format': 'json'}
    }
    Ответ написан
    Комментировать
  • Как сконвертировать минуты в часы и минуты?

    Maksim_64
    @Maksim_64
    Data Analyst
    А почему ваше решение не проходит? Ну вот попробуйте альтернативное решение (которое также работает).
    hour = int(input("Введите часы: "))
    minute = int(input("Введите минуты: "))
    waiting = int(input("Введите ожидание в минутах: "))
    
    total_minuts = minute + waiting
    waiting_h = total_minuts // 60
    result_m = '0' + str(total_minuts % 60) if total_minuts % 60 < 10 else total_minuts % 60
    
    result_hours = hour + waiting_h
    if result_hours >= 24:
        result_hours = result_hours - 24
    
    if (result_hours < 10): 
        result_hours = '0' + str(result_hours)
        
    print(f'На часах будет: {result_hours}:{result_m}')
    Ответ написан
    Комментировать
  • Как суммировать количество повторяющих значений?

    Maksim_64
    @Maksim_64
    Data Analyst
    SELECT A.id, A.data_created, A.subject,A.number_id, B.count
      FROM tablename A
           INNER JOIN (SELECT number_id, count(number_id) AS count
                         FROM tablename 
                        GROUP BY number_id) B ON A.number_id = B.number_id
    Ответ написан
    Комментировать
  • Как последовательно объединить несколько DataFrame с одинаковыми столбцами?

    Maksim_64
    @Maksim_64
    Data Analyst
    если планируете использовать pd. concat(), то сначала собираете ваши фреймы в список frame_list. A потом этот список в pd.concat(). далее pd.concat имеет аргумент axis, его поставьте 0 (если у вас совпадают имена столбцов), он будет добавлять их вниз новыми рядами.
    ваш псевдо код будет иметь вид
    frame_list = []
    for i in ally_code:
        df = get_units_player( get_player_json(i) )
        frame_list.append(df)
    final_df = pd.concat(frame_list,axis= 0)
    Ответ написан
    1 комментарий
  • Как рассчитать отступ по оси Х?

    Maksim_64
    @Maksim_64
    Data Analyst
    находим коэффициент пропорциональности сторон назовем k
    k = высота / ширина = 2320 / 3855 = 0.601
    новая высота (она известна) / новую ширину = 0.601
    800 / x = 0.601
    новая ширина = x = 1331
    Находим коэффициент уменьшения ширины:
    старая ширина * a = 1331
    3855 * a = 1331
    a = 0.345
    находим координату X для важной точки 864 * 0.345 = 298
    Ответ написан
    Комментировать
  • Установление значений для маркеров в Matplotlib?

    Maksim_64
    @Maksim_64
    Data Analyst
    это просто в функцию plot добавляем параметер '-o' и все.
    ax.plot(x, y,'-o')
    Извиняюсь неправильно прочитал вопрос увидел маркеры и все, а вы хотите значения подставить. Сейчас отредактирую.
    ax.plot(x,y,'-o')
    for i,v in enumerate(y):
        ax.text(x[i],y[i],v,fontsize=16,va='top')
    Ответ написан
    Комментировать
  • Date.time к сегоднешнему дню прибавить с помощью timedelta несколько дней?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну так вы же его уже импортровали from datetime import datetime, вторая ошибка, что вы сначала конвертируете в строку а потом добавляете timedelta(days=10), это тоже выдаст вам ошибку.
    вообщем слегка подправил ваш код
    from datetime import datetime, timedelta
    now_day = (datetime.utcnow() + timedelta(days=10)).strftime("%d")
    future = int(now_day)
    print(future)
    Ответ написан
    3 комментария