pandas 数据框对象中每个唯一实体的计数值

Counting values for each unique entity in a pandas dataframe object

我有一个包含 3 列的 csv 文件。用户、文本和标签。每个用户都有多个文本和标签。 我想知道出现频率最高的标签,以便确定每个用户的类别。

我试过:

for i in df['user'].unique():
    print (df['class'].value_counts())

这为 returns 所有用户提供了如下所示的相同值

4    3062
1    1250
0     393
3     281
2      13
Name: class, dtype: int64

我也试过了

for h in df['user'].unique():
    g = Counter(df['class'])
    print (g)

得到了

Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})

这里是示例数据 sample data 请帮忙

要按组计算值,您可以使用 groupbypd.value_counts:

df = pd.DataFrame([[1, 1], [1, 2], [1, 3], [1, 1], [1, 1], [1, 2],
                   [2, 1], [2, 3], [2, 2], [2, 2], [2, 3], [2, 3]],
                  columns=['user', 'class'])

res = df.groupby('user')['class'].apply(pd.value_counts).reset_index()
res.columns = ['user', 'class', 'count']

print(res)

   user  class   count
0     1      1       3
1     1      2       2
2     1      3       1
3     2      3       3
4     2      2       2
5     2      1       1