«Ошибка типа: невозможно преобразовать bool в numpy.ndarray» при группировании по нескольким столбцам - PullRequest
0 голосов
/ 03 октября 2019

Я бы хотел сгруппировать фрейм данных по двум столбцам, чтобы суммировать среднемесячные продажи для каждого магазина.

Данные (fact pandas dataframe):

store_id    sku_id  date    quantity    city    city    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

Группировка по store_id или month работает только нормально, но когда я пытаюсь сгруппировать по store_id и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

1 Ответ

2 голосов
/ 03 октября 2019

сначала проверьте метки и столбцы индекса

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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...