python - 使用 value_counts 查找列组合中的唯一值

标签 python pandas dataframe

我一直在尝试使用 value_counts 获取多列的计数。现在,我可以在一个列上运行它,但不能在多个列上运行。

编辑:我之前需要对唯一 ID 进行计数,因此需要对“id”进行计数,但现在我想要对“id”下的服务进行计数。我正在编辑以下数据以更准确地解释情况。

import pandas as pd
d = {'id': [1, 1, 2, 3, 3], 'service': [3, 3, 4, 2, 3], 'name': ['Joe', 'Joe', 'Bob', 'Val', 'Val']}
df = pd.DataFrame(data=d)
df['count'] = df['id'].map(df['id'].value_counts())

如果我尝试

df['count'] = df['id'].map(df['id']['service'].value_counts())

我在服务中遇到 KeyError。

如果我尝试

df['count'] = df['id']['service'].map(df['id'].value_counts())

我也遇到同样的错误。

我希望得到以下内容:

id service   1 , 3: 2
id service   2 , 4: 1  
id service   3 , 2: 1  
id service   3 , 3: 1    

我使用了错误的函数吗?

最佳答案

有几种方法。使用 groupby 并使用 count,或者创建一个元组列并应用 value_counts

这两种方法都提供可以通过元组索引的结果。

设置

import pandas as pd

d = {'id': [1, 2, 1], 'service': [3, 4, 3], 'name': ['Joe', 'Bob', 'Mark']}

df = pd.DataFrame(d)

分组方法

按照@Dark的建议:

res = df.groupby(['id', 'service']).count()

#             name
# id service      
# 1  3           2
# 2  4           1

元组列法

df['id_service'] = list(zip(df.id, df.service))
res = df['id_service'].value_counts()

# (1, 3)    2
# (2, 4)    1
# Name: id_service, dtype: int64

关于python - 使用 value_counts 查找列组合中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49367161/

相关文章:

python - 重新排序表单元素并更改 django 密码更改表单上的标签

python - 如何使用 python 列表有效地重命名数据帧索引?

python - 如何绘制数据框的多列

r - 如何在 R 中的 y 数据框中找到最接近 x 的值?

python - 在python sqlalchemy中为具有动态名称的列设置值

python - 如何将 .pb 文件转换为 .h5。 (Tensorflow 模型到 keras)

python - scrapy蜘蛛: output in chronological order

python - 将 pd datetime 对象更改为整数

r - 表示基于 r 中单个列的所有其他列

python - Pandas Groupby 对特定列进行聚合函数,显示结果中的所有列