Я создал фрейм данных под названием 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)
Фрейм данных выглядит так:
Я хочу создать два новых столбца с именами Freq_1
и Freq_2
, которые подсчитывают для каждой записи, сколько раз число 1
и число 2
появляются соответственно. Итак, я бы хотел, чтобы результирующий фрейм данных выглядел так:
Итак, давайте взглянем на столбец под названием Freq_1
:
1
встречается только один раз во всей первой записи;1
никогда не появляется.Давайте теперь посмотрим на столбец под названием Freq_2
:
2
не появляется;2
встречается дважды;Как создать столбцы Freq_1 и Freq_2 в пандах?
Так, во второй записи цифра 2 появляется дважды: один раз для признака2 и один раз для признака3. Следовательно, вновь вычисленная характеристика (Freq_2, которая подсчитывает, сколько раз цифра 2 встречается в характеристиках 1 и 2) равна 2.
Ах, я неправильно понял ваш вопрос. Смотрите мой ответ ниже
Попробуй это:
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())
Сопоставление строковых шаблонов может выполняться, когда столбцы приводятся к строковым столбцам.
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
Какой должна быть
Freq_2
вторая запись? Цифра2
встречается в 3 функциях, но в строке 4 цифры