为了账号安全,请及时绑定邮箱和手机立即绑定

按多列分组时“TypeError:无法将 bool 转换为 numpy.ndarray”

按多列分组时“TypeError:无法将 bool 转换为 numpy.ndarray”

阿晨1998 2022-06-14 10:11:22
我想按两列对数据框进行分组,以总结每家商店的平均月销售额。数据(fact熊猫数据框):store_id    sku_id  date    quantity    city    city    category    month0   354 31253   2017-08-08  1   Paris   Paris   Shirt   81   354 31253   2017-08-19  1   Paris   Paris   Shirt   82   354 31258   2017-07-30  1   Paris   Paris   Shirt   73   354 277171  2017-09-28  1   Paris   Paris   Shirt   94   174 295953  2017-08-16  1   London  London  Shirt   8分组基于store_idormonth只能正常工作,但是当我尝试同时按store_idand分组时month,我得到:groupby_month = fact['quantity'].groupby(fact['store_id', 'month'])---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-169-a8cffb72ab7c> in <module>----> 1 groupby_month = fact['quantity'].groupby(fact['store_id', 'month'])      2       3 D:\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)   2925             if self.columns.nlevels > 1:   2926                 return self._getitem_multilevel(key)-> 2927             indexer = self.columns.get_loc(key)   2928             if is_integer(indexer):   2929                 indexer = [indexer]D:\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)   2655                                  'backfill or nearest lookups')   2656             try:-> 2657                 return self._engine.get_loc(key)   2658             except KeyError:   2659                 return self._engine.get_loc(self._maybe_cast_indexer(key))pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()pandas/_libs/index.pyx in pandas._libs.index.IndexEngine._get_loc_duplicates()pandas/_libs/index.pyx in pandas._libs.index.IndexEngine._maybe_get_bool_indexer()TypeError: Cannot convert bool to numpy.ndarray
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

首先检查索引标签和列


fact.index 

fact.columns

如果您需要将索引转换为列,请使用:


利用:


fact.reset_index()

然后你可以使用:


fact.groupby(['store_id', 'month'])['quantity'].mean()

输出:


store_id  month

174       8        1

354       7        1

          8        1

          9        1

Name: quantity, dtype: int64

或更好:


fact['mean']=fact.groupby(['store_id', 'month'])['quantity'].transform('mean')

print(fact)

   store_id  sku_id        date  quantity    city  city.1 category  month  \

0       354   31253  2017-08-08         1   Paris   Paris    Shirt      8   

1       354   31253  2017-08-19         1   Paris   Paris    Shirt      8   

2       354   31258  2017-07-30         1   Paris   Paris    Shirt      7   

3       354  277171  2017-09-28         1   Paris   Paris    Shirt      9   

4       174  295953  2017-08-16         1  London  London    Shirt      8   


   mean  

0     1  

1     1  

2     1  

3     1  

4     1  


查看完整回答
反对 回复 2022-06-14
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

需要添加“ as_index=True ”

例如:“count_in = df.groupby(['time_in','id'], as_index=True )['time_in'].count()”


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号