如何计算属于 product_id 的元素的数量并将它们按元素保存在 python 的列表中?
Posted
技术标签:
【中文标题】如何计算属于 product_id 的元素的数量并将它们按元素保存在 python 的列表中?【英文标题】:How do I count numbers of elements that belong to a product_id and save them element-wise in a list in python? 【发布时间】:2022-01-15 02:46:07 【问题描述】:创建一个列表来计算属于 product_id 的元素的数量,例如宜家餐桌
给定数据
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
我尝试了这个和更多的东西: [count+1 for count, elle in enumerate(product_IDs)]
【问题讨论】:
试试df['product_elements'] = df.groupby('product_IDs').cumcount() + 1
它有效。你太棒了!!!而且这么快。谢谢你。这种不同的做法。非常感谢。
请下次改进问题的格式,并更详细地描述您已经尝试过的内容。祝你有美好的一天:)
我会的。这是我的第一次。谢谢你。 :-)
【参考方案1】:
>>> product_IDs = [123,123,123, 321,321,321, 345,345,345,345,345]
>>> product_elements = (pd.Series(product_IDs)
... .value_counts(sort=False)
... .reset_index()
... .apply(
... lambda x:list(range(1, x[0]+1) ),
... axis=1
... ).explode()
... )
>>> 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
另一种解决方案:
>>> x = pd.Series([123,123,123, 321,321,321, 345,345,345,345,345])
>>> (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
【讨论】:
哇。我知道这很复杂。但我永远不会想出这样的解决方案。聪明的阿米尔太感谢了。我将尝试了解您所做的并查找所有功能。干得好!以上是关于如何计算属于 product_id 的元素的数量并将它们按元素保存在 python 的列表中?的主要内容,如果未能解决你的问题,请参考以下文章