dataframe value_counts()形状错误

时间:2017-10-01 15:32:34

标签: python pandas group-by shape

我正在尝试浏览时间序列数据集,并计算每天出现的每种独特服装类别的次数。除了2012年,我的数据集每年工作正常。当我运行我的代码时,我收到形状广播错误,我无法弄清楚为什么2012导致此错误,但我的其他年份都没有。

test=orders['Category']['2012'] counts = test.groupby(pd.Grouper(freq='D')).value_counts() 这是代码产生的错误

ValueError                                Traceback (most recent call last)
<ipython-input-127-bc2dbf569e47> in <module>()
      1 test=orders['Category']['2012']
----> 2 counts = test.groupby(pd.Grouper(freq='D')).value_counts()

c:\users\matthew mclaughlin\miniconda3\envs\cseclass\lib\site-packages\pandas\core\groupby.py in value_counts(self, normalize, sort, ascending, bins, dropna)
   3015 
   3016         # multi-index components
-> 3017         labels = list(map(rep, self.grouper.recons_labels)) + [lab[inc]]
   3018         levels = [ping.group_index for ping in self.grouper.groupings] + [lev]
   3019         names = self.grouper.names + [self.name]

c:\users\matthew mclaughlin\miniconda3\envs\cseclass\lib\site-packages\numpy\core\fromnumeric.py in repeat(a, repeats, axis)
    394     except AttributeError:
    395         return _wrapit(a, 'repeat', repeats, axis)
--> 396     return repeat(repeats, axis)
    397 
    398 

ValueError: operands could not be broadcast together with shape (366,) (363,)

我的数据的示例输出与此

类似
Order Date
2013-01-01              Outerwear
2013-01-01            Accessories
2013-01-01       First Layer Tops
2013-01-01       First Layer Tops
2013-01-01            Accessories
2013-01-01    First Layer Bottoms
2013-01-01             Kid's Sets
2013-01-01              Outerwear

2013-01-01外套

在运行之后,代码假设生成的代码如下所示。

Order Date  Category           
2013-01-01  Outerwear              289
            First Layer Tops       230
            Accessories            190
            First Layer Bottoms    155
            Footwear                10
            Kid's Sets               3

最终,我将此结果取消堆叠并将其插入每个类别的新列中。

2 个答案:

答案 0 :(得分:1)

Groupby对象没有名为.value_counts()的属性。如果您想要计算值,请使用apply + stack,即

df.groupby(pd.Grouper(freq='D')).apply(lambda x : x.Category.value_counts()).stack()

test_data的输出以及其他日期。


Order Date  Category           
2013-01-01  Outerwear              3
            First Layer Tops       2
            Accessories            2
            Kid's Sets             1
            First Layer Bottoms    1
2013-01-02  Outerwear              3
            First Layer Tops       2
            Accessories            2
            Kid's Sets             1
            First Layer Bottoms    1
dtype: int64

如果您尝试根据年份选择类别,请尝试像df[df.index.year == 2012]

这样的布尔索引

答案 1 :(得分:0)

df['Date'] = pd.to_datetime(df['Date'])   
df.set_index('Date',inplace=True)    
df.groupby([pd.Grouper(freq='D'),'Category']).size()

如果您想针对特定年份对此进行测试,请按照以下方式选择年份所在的行:

test = df[df['Date'].dt.year == 2013]
test.set_index('Date',inplace=True)    
test.groupby([pd.Grouper(freq='D'),'Category']).size()

您还可以使用数据透视表:

pd.pivot_table(df, index=['Date','Category'], aggfunc=np.size)