熊猫,groupby和投影的顺序

时间:2015-08-13 17:18:44

标签: python pandas

我在Pandas中有一个数据框,在该数据框中我想知道两个特定列中每个值组合的出现次数。以下代码似乎做了我想要的:

coupon_test.groupby(['CAPSULE_TEXT', 'GENRE_NAME'])[['CAPSULE_TEXT', 'GENRE_NAME']].count()

                            CAPSULE_TEXT  GENRE_NAME
CAPSULE_TEXT    GENRE_NAME      
WEBサービス     その他のクーポン             2           2
...

但是,如果我先进行投影然后分组,则会返回一个空结果:

coupon_test[['CAPSULE_TEXT', 'GENRE_NAME']].groupby(['CAPSULE_TEXT', 'GENRE_NAME']).count()

CAPSULE_TEXT  GENRE_NAME

如果我删除了计数,我会得到一些结果,但它们似乎没有分组:

coupon_test[['CAPSULE_TEXT', 'GENRE_NAME']].groupby(['CAPSULE_TEXT', 'GENRE_NAME']).head()

    CAPSULE_TEXT    GENRE_NAME
0   グルメ     グルメ
...

这两种情况有什么区别?为什么第二个示例中的count()不会返回与第一个示例中的结果相同的结果?

1 个答案:

答案 0 :(得分:1)

coupon_test[['CAPSULE_TEXT', 'GENRE_NAME']]是一个DataFrame,只有两列。 如果按这两列进行分组,则表示没有值的组。每个组都是一个强大的数据框:

In [77]: pd.DataFrame(index=[[0,1],[2,3]])
Out[77]: 
Empty DataFrame
Columns: []
Index: [(0, 2), (1, 3)]

count应用于每个空的DataFrame会产生一个空系列:

In [79]: pd.DataFrame(index=[[0,1],[2,3]]).count()
Out[79]: Series([], dtype: int64)

因此,这是一个退化的情况,groupby/count没有返回任何内容。这个故事的寓意是,当使用groupby/count时,您至少需要一个您没有分组的列,以便可以计算