将每个值的频率指定给具有新列的数据帧

2024-05-09 02:15:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着建立一个数据帧来计算一个名为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\u 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

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


Tags: 数据indexvalue数字例子频率frequencycategory
3条回答

使用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

你可以像下面这样使用分组

df.groupby("Category") \
.apply(lambda g: g.assign(frequency = len(g))) \
.reset_index(level=0, drop=True)
df['Frequency'] = df.groupby('Category').transform('count')

相关问题 更多 >