如何为Dataframe一列分配不同的数字[重复]

Posted

技术标签:

【中文标题】如何为Dataframe一列分配不同的数字[重复]【英文标题】:How to assign different numbers to Dataframe's one column [duplicate] 【发布时间】:2021-04-15 17:57:42 【问题描述】:

我有一个包含 294467 行和 7 列的数据框。我想为具有相同品牌的产品品牌分配相同的编号。

这是我的数据框的示例:

        overall  ...                 brand
0           5.0  ...     Pirmal Healthcare
1           5.0  ...     Pirmal Healthcare
2           5.0  ...     Pirmal Healthcare
3           5.0  ...     Pirmal Healthcare
4           4.0  ...     Pirmal Healthcare
 ...        ...                   ...
294975      4.0  ...  Gentlemen's Hardware
294976      5.0  ...     Benefit Cosmetics
294977      1.0  ...         Salon Perfect
294978      1.0  ...               GBSTORE
294979      1.0  ...               GBSTORE

[294467 rows x 7 columns]

最终结果应该是:

        overall  ...    brand
0           5.0  ...     1
1           5.0  ...     1
2           5.0  ...     1
3           5.0  ...     1
4           4.0  ...     1
  ...       ...         ...
294975      4.0  ...    7839
294976      5.0  ...    7840
294977      1.0  ...    7841
294978      1.0  ...    7842
294979      1.0  ...    7842

[294467 rows x 7 columns]

对于这个结果,我根据品牌对数据框进行了排序。然后用这个代码给他们分配不同的号码:

sorted_copy = copy.sort_values('brand')

random_number=0
first=""
for f, row in sorted_copy.iterrows():  
    i=row['brand'] 
    
    if(first == i):
        sorted_copy.at[f, 'brand'] = random_number
        
        
    elif(first !=i):
        first=i
        random_number= random_number +1
        sorted_copy.at[f, 'brand'] = random_number

但是,这个过程可能需要一个半小时。有什么办法可以在短时间内得到这个结果吗?有人可以帮忙吗?

谢谢。

【问题讨论】:

您能否通过您的数据框样本以及预期输出(不清楚您想要实现的目标) 你能检查一下我的例子的“品牌”栏吗?其他列并不那么重要。这就是为什么我没有在这里添加它们。 @DanailPetrov 所以..您只需要为每个品牌添加一个唯一编号,是这样吗? 使用df['brand'].factorize()[0]+1 此解决方案有效,而且速度非常快。谢谢! @anky 【参考方案1】:

df['brand'] = df['brand'].astype("category").cat.codes 应该可以正常工作。

【讨论】:

以上是关于如何为Dataframe一列分配不同的数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为列中的每个唯一值分配值[重复]

Pig如何为列分配名称?

如何为具有不同颜色的每一行绘制某个 DataFrame 的切片?

如何为 Spark RDD 中的元素分配唯一的连续编号

SQL:如何为一列中具有重复值的每组行选择一行?

如何为一组边分配相同的样式?