Для аналогичного значения в столбце добавьте новую частоту столбцов

#python #pandas #dataframe

#python #панды #фрейм данных

Вопрос:

У меня есть фрейм данных :

 Id  age number 
1    35   7
5    76   9
1    15   0
2    10   4
5    43   8
  

Что мне нужно получить, так это :

 Id  age  number freq
1   35    7     2
5   76    9     2
1   15    0     1
2   10    4     1
5   43    8     1
  

Добавьте новую частоту столбца, для каждого значения в столбце мы берем все строки с одинаковым значением в ID и подсчитываем строки, где значение cat меньше.

Ответ №1:

Если нужен счетчик в порядке убывания, используйте GroupBy.cumcount :

 df['freq'] = df.groupby('Id').cumcount(ascending=False).add(1)
  

Но если необходимо подсчитывать значения при Id использовании GroupBy.transform с DataFrameGroupBy.size , вывод будет другим:

 df['freq'] = df.groupby('Id')['Id'].transform('size')
  

Альтернатива с Series.map и Series.value_counts :

 df['freq'] = df['Id'].map(df['Id'].value_counts())