我正在使用具有以下结构的pandas DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame({'brand' : ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
'value' : [111, 111, 222, 222, 333, 333, 444, 444, 444, 555, 555, 555, 666, 777, 888]})
print(df)
brand value
0 A 111
1 B 111
2 A 222
3 B 222
4 A 333
5 B 333
6 A 444
7 B 444
8 C 444
9 A 555
10 B 555
11 C 555
12 A 666
13 B 777
14 C 888
我想在上表中计算一些描述:
首先,计算具有不同品牌且匹配相同值的组的数量。这是一个有帮助的视觉效果:
如您所见,有5个组,每个组内的品牌不同,它们匹配相同的值。因此,基本上,我想编写一个查询,该查询将输出这些组的数量(本例中为5)。
第二,我想更详细地介绍每个小组。具体来说,计算:
我尝试使用groupby语句对自己的解决方案没有任何成功。任何帮助,将不胜感激。
答案 0 :(得分:2)
第一个问题
使用GroupBy.size 并用1:将比较的真实结果值加起来:
(df.groupby('value').size()>1).sum()
输出:
5
第二个问题
您可以使用Series.value_counts创建这样的数据框:
df_count=df.groupby('value').size().value_counts().reset_index(name='Nº Groups').rename(columns={'index':'Nº Records/Group'})
print(df_count)
Nº Records/Group Nº Groups
0 2 3
1 1 3
2 3 2