#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())