计算匹配组的描述

时间:2019-10-06 16:51:41

标签: python pandas dataframe

我正在使用具有以下结构的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

我想在上表中计算一些描述:

首先,计算具有不同品牌且匹配相同值的组的数量。这是一个有帮助的视觉效果:

enter image description here

如您所见,有5个组,每个组内的品牌不同,它们匹配相同的值。因此,基本上,我想编写一个查询,该查询将输出这些组的数量(本例中为5)。


第二,我想更详细地介绍每个小组。具体来说,计算:

  • 具有单个记录的组数:3(最后3个记录)
  • 具有2条记录的组数:3(红色,绿色和蓝色组)
  • 具有3条记录的组数:2(紫色和黑色组)

我尝试使用groupby语句对自己的解决方案没有任何成功。任何帮助,将不胜感激。

1 个答案:

答案 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