#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. Вау. Я знал, что это сложно. Но я бы никогда не пришел к такому решению. Умный Амир. Огромное спасибо. Я постараюсь понять, что вы сделали, и посмотрю все функции. Отличная работа!