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 值较小的行。
解决方案
如果需要按降序排列的计数器,请使用GroupBy.cumcount
:
df['freq'] = df.groupby('Id').cumcount(ascending=False).add(1)
但是如果需要通过Id
使用GroupBy.transform
with来计算值DataFrameGroupBy.size
,则输出是不同的:
df['freq'] = df.groupby('Id')['Id'].transform('size')
Series.map
与和替代Series.value_counts
:
df['freq'] = df['Id'].map(df['Id'].value_counts())