首页 > 解决方案 > 对于列中的相似值,添加新的列频率

问题描述

我有一个数据框:

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 值较小的行。

标签: pythonpandasdataframe

解决方案


如果需要按降序排列的计数器,请使用GroupBy.cumcount

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

但是如果需要通过Id使用GroupBy.transformwith来计算值DataFrameGroupBy.size,则输出是不同的:

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

Series.map与和替代Series.value_counts

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

推荐阅读