Python 将每个值的频率分配给具有新列的dataframe

Python 将每个值的频率分配给具有新列的dataframe,python,pandas,dataframe,count,duplicates,Python,Pandas,Dataframe,Count,Duplicates,我试图建立一个数据帧,对一个名为frequency的列进行计数。 此列应显示值在每行数据帧的特定列中出现的频率。大概是这样的: Index Category Frequency 0 1 1 1 3 2 2 3 2 3 4 1 4 7 3 5 7 3

我试图建立一个数据帧,对一个名为frequency的列进行计数。 此列应显示值在每行数据帧的特定列中出现的频率。大概是这样的:

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

列的行数与数据帧的行数相同非常重要,最好附加到相同的数据帧中

df.groupby(“类别”)\
.apply(λg:g.assign(频率=len(g)))\
.reset_索引(级别=0,下降=True)
使用:

或:

输出:

   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\u counts
可以得到一个系列,其
索引
是类别的元素和
​​是伯爵。因此,您可以使用或创建一个包含
类别
值的系列​​由计数中的数字替换。最后,将此序列分配到
频率
df['frequency']=df.groupby('Category')。transform('count'))
   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