• Как с помощью assign добавить в фрейм данных столбец, в котором будут индексы трех максимальных элементов из другого столбца той же записи?

    Maksim_64
    @Maksim_64
    Data Analyst
    Все довольно просто, на будущее если запутался, то предоставляй:
    1. Входные данные (фрейм)
    2 . Что хотелось бы получить.
    3. Ну и попытку решения (ее ты предоставил, пытался вопросов нет).

    Сделаю за тебя фрейм со случайными данными и затем решу вопрос.
    df = pd.DataFrame({
        'A':[np.random.randint(1,100,20) for i in range(5)],
    })

    Решение
    result = (
        df.assign(
            three_largest = lambda x: x['A'].apply(lambda x: pd.Series(x).nlargest(3).tolist()),
            three_largest_index = lambda x: x['A'].apply(lambda x: pd.Series(x).nlargest(3).index.tolist())
        )
    )

    Если захочешь разложить свои списки на отдельные колонки то используй следующий трюк.
    result[['one','two','three']] = pd.DataFrame(result['three_largest_index'].tolist(),index=result.index)
    result
    Как видишь все в разных вариациях, как удобно.
    Ответ написан
    Комментировать
  • Как правильно заменить значения в столбцах фрейма данных python pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    df = pd.DataFrame({
        'A':[[5,6,24,3],[23,11,15],[3,100]],
        'B':np.NaN
    })
    (
        df.assign(
            A_max =lambda x: x['A'].apply(max),
            B_indexmax =lambda x: x['A'].apply(lambda x: pd.Series(x).idxmax()),
        )
    )

    Пару слов.
    1. Для замены. Вместо A_max, B_index_max меняем на А и B и меняем их местами сначала B потом A. Так делать плохая практика. Не нужно тебе A и B колонки просто выкинь их отдельно, а эти переименуй.

    2. loc мощный инструмент, для выборок он у меня наверное почти в каждом запросе присутствует но для выборок Для процессирования колонок плохая практика
    df.loc[:,[колонка]] = массив, вот так старайся не делать. Используй assign, как у меня в примере.
    Ответ написан
    Комментировать
  • Как посчитать и вывести уникальные значения колонок dataframe, которые имеют тип коллекции/списка?

    Maksim_64
    @Maksim_64
    Data Analyst
    С помощью цикла однозначно не придется. Встроенный инструмент есть, даже много.
    чтобы мне достать из этих столбцов уникальные значения
    Вот это не совсем понятно, может имелось ввиду из списков, уникальные, и что значит достать.

    Если у тебя твои данные в списках то можно использовать explode.
    (
        pd.DataFrame({
            'ID':[1,2],
            'genres':[['Strategy'],['Fightening','Adventure','Arcade']]
        })
        .explode('genres')
    )
    Затем unique (уникальные) value_counts (посчитать каких и сколько у тебя там) или все что угодно, опций огромное количество. Обрати внимание структура фрейма не рушится (поведение колонки ID).

    В качестве ответа. Цикл не использовать, можно все. Для более конкретного ответа. Предоставляешь игрушечный фрейм, и то что ты хочешь увидеть, на выходе. По скольку словами не очевидно, что именно ты хочешь.
    Ответ написан
    Комментировать
  • Что означает запись в скобках сразу после инициализации?

    @Everything_is_bad
    гугли *args и **kwargs
    Ответ написан
    Комментировать
  • Что означает запись в скобках сразу после инициализации?

    Maksim_64
    @Maksim_64
    Data Analyst
    Действительно, все очень просто.
    namedtuple - это функция которая возвращает объект класса namedtuple, который является подсклассом встроенного tuple. Где первый параметр, это имя типа данных. Второй это параметры.
    from collections import namedtuple
    Point = namedtuple("Point", ['x','y'])
    point = Point(2,4)
    print(point)

    Теперь представим есть некий словарь и просто перепишем в одну строчку, с распаковкой параметров '*'.
    d = {
        'x':2,
        'y':4
    }
    
    print(namedtuple('Point',d.keys())(*d.values()))

    d.keys() это коллекция ключей строк, как в пошаговом примере, *d.values() это распакованная последовательность значений.
    Ответ написан
    Комментировать