【问题标题】:Counting values for each unique entity in a pandas dataframe object计算熊猫数据框对象中每个唯一实体的值
【发布时间】:2018-06-03 18:01:44
【问题描述】:

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

我试过了:

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

它为所有用户返回如下所示的相同值

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 请帮忙

【问题讨论】:

  • 样本数据和预期输出使其更加清晰。
  • 所以您只想计算每个用户的标签?也许groupby可以帮助你
  • 对不起,伙计。我现在已经包含了示例数据

标签: python pandas counting


【解决方案1】:

对于按组计算值,您可以使用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

【讨论】:

  • 优秀的答案。但是我如何编写条件语句来访问计数值。即如果一个类的计数值 > 200 那么类别 = 0 或 1 或 2....???
  • 这是一个单独的问题,但您可以按照this answer 使用pd.cutnp.digitize
  • 感谢您快速准确的回复,我还查看了stackoverflow.com/help/someone-answers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2018-08-14
  • 2016-12-16
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多