Как найти Неповторяющееся вхождение столбца относительно другого столбца - PullRequest
0 голосов
/ 05 июня 2019
>>> df=pd.DataFrame({'order No':[71,71,71,71,71,71,71,72,72,72,72,72,72,72,73,73],'product id':[123,12,123,123,123,15,16,14,112,15,112,112,12,112,100,101],'Category':['product','service','product','product','product','service','service','service','product','service','product','product','service','product','service','service']})
>>> df
    order No  product id Category
0         71         123  product
1         71          12  service
2         71         123  product
3         71         123  product
4         71         123  product
5         71          15  service
6         71          16  service
7         72          14  service
8         72         112  product
9         72          15  service
10        72         112  product
11        72         112  product
12        72          12  service
13        72         112  product
14        73         100  service
15        73         101  service

Ожидаемый результат:

order No  Category  COunt of product
71        Product   2
72        Product   3

Как найти количество неповторяющихся категорий = товара по каждому заказу нет


На самом деле, требуемый результат не повторяется: номер заказа, идентификатор продукта, категория (только для продукта), здесь только индекс 0 и индекс 2 должны учитываться для заказа № 71. Индекс 3 и 4 является повторяющимся, потому что нет Новая комбинация между индексами 3 и 4. Вот как я получил 2. И аналогично для заказа № 72, только индексы 8,10 и 13 должны учитывать, чтобы получить счет 3

1 Ответ

0 голосов
/ 05 июня 2019

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

Для первой части вы можете просто сравнить кадр данных с его смещением и отклонить строки, в которых все столбцы одинаковы:

print(df.loc[(df.shift()!=df).any(axis=1)])

дает:

    order No  product id Category
0         71         123  product
1         71          12  service
2         71         123  product
5         71          15  service
6         71          16  service
7         72          14  service
8         72         112  product
9         72          15  service
10        72         112  product
12        72          12  service
13        72         112  product
14        73         100  service
15        73         101  service

Чтобы рассмотреть только категорию product, просто добавьте условие:

df.loc[(~(df.shift() == df).all(axis=1))&(df.Category=='product')]

дает:

    order No  product id Category
0         71         123  product
2         71         123  product
8         72         112  product
10        72         112  product
13        72         112  product

И наконец groupby и count:

resul = df.loc[(~(df.shift() == df).all(axis=1))
   &(df.Category=='product')].groupby(['order No', 'Category']).count()

, как и ожидалось:

                   product id
order No Category            
71       product            2
72       product            3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...