用新列将每个值的频率分配给数据框

时间:2019-10-01 14:34:23

标签: python pandas dataframe count duplicates

我尝试设置一个数据框,该数据框包含一个称为频率的列。 此列应显示每行数据框的特定列中出现该值的频率。像这样:

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 个答案:

答案 0 :(得分:1)

df['Frequency'] = df.groupby('Category').transform('count')

答案 1 :(得分:0)

您可以使用分组方式,如下所示

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

答案 2 :(得分:0)

使用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是计数。因此,您可以使用mappandas.Series.replace创建一个category值替换为计数中的值的序列。最后将此系列分配到frequency