Как создать и заполнить столбцы pandas на основе значений ячеек

Я создал фрейм данных под названием df следующим образом:

import pandas as pd
d = {'feature1': [1, 22,45,78,78], 'feature2': [33, 2,2,65,65], 'feature3': [100, 2,359,87,2],}
df = pd.DataFrame(data=d)
print(df)

Фрейм данных выглядит так:

enter image description here

Я хочу создать два новых столбца с именами Freq_1 и Freq_2, которые подсчитывают для каждой записи, сколько раз число 1 и число 2 появляются соответственно. Итак, я бы хотел, чтобы результирующий фрейм данных выглядел так:

enter image description here

Итак, давайте взглянем на столбец под названием Freq_1:

  • для первой записи он равен 1, потому что число 1 встречается только один раз во всей первой записи;
  • для других записей он равен 0, потому что число 1 никогда не появляется.

Давайте теперь посмотрим на столбец под названием Freq_2:

  • для первой записи Freq_2 равно 0, потому что число 2 не появляется;
  • для второй записи Freq_2 равно 2, потому что число 2 встречается дважды;
  • и так далее ...

Как создать столбцы Freq_1 и Freq_2 в пандах?

Какой должна быть Freq_2 вторая запись? Цифра 2 встречается в 3 функциях, но в строке 4 цифры

Code Different 09.04.2022 14:39

Так, во второй записи цифра 2 появляется дважды: один раз для признака2 и один раз для признака3. Следовательно, вновь вычисленная характеристика (Freq_2, которая подсчитывает, сколько раз цифра 2 встречается в характеристиках 1 и 2) равна 2.

Giampaolo Levorato 09.04.2022 14:41

Ах, я неправильно понял ваш вопрос. Смотрите мой ответ ниже

Code Different 09.04.2022 14:44
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
3
26
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это:

freq = {
    i: df.eq(i).sum(axis=1) for i in range(10)
}

pd.concat([df, pd.DataFrame(freq).add_prefix("Freq_")], axis=1)

Результат:

 feature1  feature2  feature3  Freq_0  Freq_1  Freq_2  Freq_3  Freq_4  Freq_5  Freq_6  Freq_7  Freq_8  Freq_9
        1        33       100       0       1       0       0       0       0       0       0       0       0
       22         2         2       0       0       2       0       0       0       0       0       0       0
       45         2       359       0       0       1       0       0       0       0       0       0       0
       78        65        87       0       0       0       0       0       0       0       0       0       0
       78        65         2       0       0       1       0       0       0       0       0       0       0

Ницца. Вместо диапазона можно также создать словарь с любыми значениями: for i in sorted(df.unstack().unique())

Levin Magruder 09.04.2022 18:25

Сопоставление строковых шаблонов может выполняться, когда столбцы приводятся к строковым столбцам.

d = {'feature1': [1, 22,45,78,78], 'feature2': [33, 2,2,65,65], 'feature3': [100, 2,359,87,2],}
df = pd.DataFrame(data=d)
df = df.stack().astype(str).unstack()

Теперь мы можем выполнить итерацию для каждого шаблона, который мы ищем:

usefull_columns = df.columns
for pattern in ['1', '2']:
     df[f'freq_{pattern}'] = df[usefull_columns].stack().str.count(pattern).unstack().max(axis=1)

Печать вывода:

  feature1 feature2 feature3  freq_1  freq_2
0        1       33      100     1.0     0.0
1       22        2        2     0.0     2.0
2       45        2      359     0.0     1.0
3       78       65       87     0.0     0.0
4       78       65        2     0.0     1.0

Мы сможем

s = df.where(df.isin([1,2])).stack()
out = df.join(pd.crosstab(s.index.get_level_values(0),s).add_prefix('Freq_')).fillna(0)
Out[299]: 
   feature1  feature2  feature3  Freq_1.0  Freq_2.0
0         1        33       100       1.0       0.0
1        22         2         2       0.0       2.0
2        45         2       359       0.0       1.0
3        78        65        87       0.0       0.0
4        78        65         2       0.0       1.0

Другие вопросы по теме