使用value_counts在列组合中查找唯一值

时间:2018-03-19 15:51:30

标签: 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    

我使用了错误的功能吗?

1 个答案:

答案 0 :(得分: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)

Groupby方法

正如@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