如何计算属于 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 的列表中?的主要内容,如果未能解决你的问题,请参考以下文章

计算选中行中的数量并更新 div 元素

如何计算 NumPy bool 数组中真实元素的数量

如何计算一个非常大的惰性序列中的元素数量?

如何使用 Diesel 计算数组列中不同元素的数量?

如何有效地计算另一列中每个元素的较大元素的数量?

如何有效地计算另一列中每个元素的较小元素的数量?