如何比较每组中Pandas组后的计数?

时间:2017-07-24 06:34:07

标签: python pandas count entity-attribute-value pandas-groupby

我将EAV表加载到Pandas数据帧中。我使用group by来计算每个实体的每个字段的出现次数。我想比较价格和产品名称的数量,提取计数不相等的数据并提取它们进行处理(在这种情况下为a和c)。 目前,计数也出现在与标题不同的行上。任何帮助将不胜感激。

                        Count
Entity  Attribute
 a      ProductName      10
        Price            11
 b      ProductName       2
        Price             2
 c      ProductName       3
        Price             4

1 个答案:

答案 0 :(得分:0)

我认为Entitiescolumns的第一步是unstack

df1 = df['Count'].unstack(0)
print (df1)
Entity        a  b  c
Attribute            
Price        11  2  4
ProductName  10  2  3

然后按DataFrame.loc选择列,并按Series.ne!=)比较行数,按boolean mask比较最后一个过滤列:

print (df1.loc['Price'].ne(df1.loc['ProductName']))
Entity
a     True
b    False
c     True
dtype: bool

df2 = df1.loc[:, df1.loc['Price'].ne(df1.loc['ProductName'])]
print (df2)
Entity        a  c
Attribute         
Price        11  4
ProductName  10  3

类似,如果只需要列名:

cols = df1.columns[df1.loc['Price'].ne(df1.loc['ProductName'])].tolist()
print (cols)
['a', 'c']