我有一个表格的数据集:
r= pd.DataFrame({
'id': [1, 1, 2, 2, 3],
'value': [4.0, 5.5, 6.0, 4.0, 5],
'label': ["A", "A", "B", "B", "A"],
})
请注意,每个id
都可以重复,同一label
可以应用于不同的id
。
我想要计算我有多少不同的标签,但不要重复计算具有相同ID的标签。所以在这种情况下输出将是
>>> r.something()
{"A": 2, "B": 1}
这就是我的结果,但似乎有一种我没有看到的更容易的方法。
rr = r.groupby('id').agg({"label": lambda x: x.values[0]}).reset_index()
这会产生类型<{p>的DataFrame
id label value
0 1 A 4.0
1 1 A 5.5
然后我可以做通常的计数
rr.groupby('label').size()
答案 0 :(得分:2)
groupby
和nunique
?
r.groupby('label')['id'].nunique()
#label
#A 2
#B 1
#Name: id, dtype: int64
答案 1 :(得分:2)
这将产生你需要的东西
r.drop_duplicates(['id','label']).label.value_counts()
Out[118]:
A 2
B 1
Name: label, dtype: int64