我一直在尝试使用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
我使用了错误的功能吗?
答案 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