dataframe value_counts() 形状错误
dataframe value_counts() Shape Error
我正在尝试浏览一个时间序列数据集,并计算每天每种独特服装类别出现的次数。除了 2012 年之外,我的数据集每年都工作正常。当我 运行 我的代码收到形状广播错误时,我无法弄清楚为什么 2012 年会导致此错误,但我其他年份的 none 是。
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
最后,我拆开这个结果并将其插入到每个类别的新列中。
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
如果您尝试 select 基于年份的类别,请尝试像 df[df.index.year == 2012]
这样的布尔索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date',inplace=True)
df.groupby([pd.Grouper(freq='D'),'Category']).size()
如果您想针对特定年份对此进行测试,请按以下方式select 查找年份所在的行:
test = df[df['Date'].dt.year == 2013]
test.set_index('Date',inplace=True)
test.groupby([pd.Grouper(freq='D'),'Category']).size()
您也可以使用枢轴 table:
pd.pivot_table(df, index=['Date','Category'], aggfunc=np.size)
我正在尝试浏览一个时间序列数据集,并计算每天每种独特服装类别出现的次数。除了 2012 年之外,我的数据集每年都工作正常。当我 运行 我的代码收到形状广播错误时,我无法弄清楚为什么 2012 年会导致此错误,但我其他年份的 none 是。
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
最后,我拆开这个结果并将其插入到每个类别的新列中。
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
如果您尝试 select 基于年份的类别,请尝试像 df[df.index.year == 2012]
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date',inplace=True)
df.groupby([pd.Grouper(freq='D'),'Category']).size()
如果您想针对特定年份对此进行测试,请按以下方式select 查找年份所在的行:
test = df[df['Date'].dt.year == 2013]
test.set_index('Date',inplace=True)
test.groupby([pd.Grouper(freq='D'),'Category']).size()
您也可以使用枢轴 table:
pd.pivot_table(df, index=['Date','Category'], aggfunc=np.size)