Присвойте частоту каждого значения кадру данных с новым столбцом - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь установить Dataframe, который формирует столбец, называемый частотой. Этот столбец должен показывать, как часто значение присутствует в определенном столбце кадра данных в каждой строке. Примерно так:

Index  Category  Frequency    
     0        1         1
     1        3         2
     2        3         2
     3        4         1
     4        7         3
     5        7         3
     6        7         3
     7        8         1

Это всего лишь пример

Я уже пробовал это с value_counts (), однако я получаю значение только в последней строке появившегося числа. В случае примера

Index  Category  Frequency    
     0        1         1
     1        3         N.A
     2        3         2
     3        4         1
     4        7         N.A
     5        7         N.A
     6        7         3
     7        8         1

Очень важно, чтобы столбец имел такое же количество строк, что и кадр данных, предпочтительно добавленный к тому же кадру данных

Ответы [ 3 ]

1 голос
/ 01 октября 2019
df['Frequency'] = df.groupby('Category').transform('count')
0 голосов
/ 01 октября 2019

Использование pandas.Series.map :

df['Frecuency']=df['Category'].map(df['Category'].value_counts())

или pandas.Series.replace :

df['Frecuency']=df['Category'].replace(df['Category'].value_counts())

Вывод:

   Index  Category  Frecuency
0      0         1          1
1      1         3          2
2      2         3          2
3      3         4          1
4      4         7          3
5      5         7          3
6      6         7          3
7      7         8          1

Подробности

df['Category'].value_counts()
7    3
3    2
4    1
1    1
8    1
Name: Category, dtype: int64

с использованием value_counts вы получите серию, в которой index являются элементами категории иvalues это количество. Таким образом, вы можете использовать map или pandas.Series.replace , чтобы создать серию со значениями category, замененными значениями в счетчике. И, наконец, присвойте эту серию столбцу frequency

.
0 голосов
/ 01 октября 2019

Вы можете сделать это с помощью группы, как показано ниже

df.groupby("Category") \
.apply(lambda g: g.assign(frequency = len(g))) \
.reset_index(level=0, drop=True)
...