Как подсчитать количество элементов, принадлежащих идентификатору product_id, и сохранить их по элементам в списке на python?

#python #dataframe #for-loop #list-comprehension #counting

#питон #фрейм данных #для-петли #список-понимание #подсчет

Вопрос:

Создайте список, в котором подсчитывается количество элементов, принадлежащих идентификатору продукта, например, таблица Ikea

Приведенные данные

 product_IDs = [123,123,123,  321,321,321,  345,345,345,345,345]  

Как мне создать этот список на основе данных product_IDs?

 product_elements = [1, 2, 3,   1, 2, 3,  1, 2, 3, 4, 5]  

Моя Цель

 import pandas as pd   data = {'Product_ID': product_IDs,  'Product_elements': product_elements  }  df = pd.DataFrame.from_dict(data) df   

Я пробовал это и многое другое: [количество 1 для количества, элемент в перечислении(product_IDs)]

Комментарии:

1. пробовать df['product_elements'] = df.groupby('product_IDs').cumcount() 1

2. Это работает. Ты потрясающая!!! И так быстро. Спасибо. Такой другой подход. Огромное спасибо.

3. Пожалуйста, в следующий раз улучшите форматирование своих вопросов и более подробно опишите то, что вы уже пробовали. Хорошего вам дня 🙂

4. Я буду. Это мой первый раз. Спасибо. 🙂

Ответ №1:

 gt;gt;gt; product_IDs = [123,123,123, 321,321,321, 345,345,345,345,345] gt;gt;gt; product_elements = (pd.Series(product_IDs) ... .value_counts(sort=False) ... .reset_index() ... .apply( ... lambda x:list(range(1, x[0] 1) ),  ... axis=1 ... ).explode() ... )  gt;gt;gt; pd.DataFrame({ ... "product_IDs" : product_IDs, ... "product_elements" : product_elements ... }).reset_index(drop=True)   product_IDs product_elements 0 123 1 1 123 2 2 123 3 3 321 1 4 321 2 5 321 3 6 345 1 7 345 2 8 345 3 9 345 4 10 345 5  

Другое Решение:

 gt;gt;gt; x = pd.Series([123,123,123, 321,321,321, 345,345,345,345,345]) gt;gt;gt; (x ... .groupby(x) ... .apply(lambda x:range(1, len(x) 1)) ... .explode() ... .reset_index() ... .rename(columns={"index" : "product_IDs", 0:"product_elements"}) ... )   product_IDs product_elements 0 123 1 1 123 2 2 123 3 3 321 1 4 321 2 5 321 3 6 345 1 7 345 2 8 345 3 9 345 4 10 345 5   

Комментарии:

1. Вау. Я знал, что это сложно. Но я бы никогда не пришел к такому решению. Умный Амир. Огромное спасибо. Я постараюсь понять, что вы сделали, и посмотрю все функции. Отличная работа!