如何为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一列分配不同的数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章