[英]How to create a unique identifier based on multiple columns?
我有一个 pandas dataframe 看起来像这样:
brand description former_price discounted_price
0 A icecream 1099.0 855.0
1 A cheese 469.0 375.0
2 B catfood 179.0 119.0
3 C NaN 699.0 399.0
4 NaN icecream 769.0 549.0
5 A icecream 769.0 669.0
我想创建一个列,为每个品牌和描述组合分配一个唯一值。 请注意,数据集中可能缺少品牌或描述(由 NaN 值通知)。 另外,请注意,如果品牌和描述相同(重复),我仍然希望行的唯一值相同。
output 应如下所示:
product_key brand description former_price discounted_price
0 1 A icecream 1099.0 855.0
1 2 A cheese 469.0 375.0
2 3 B catfood 179.0 119.0
3 4 C NaN 699.0 399.0
4 5 NaN icecream 769.0 549.0
5 1 A icecream 769.0 669.0
product_key 中的值可以是任何值,我只希望它们基于品牌和描述列是唯一的。 非常感谢任何帮助!
非常感谢!
您可以尝试使用pd.Series.factorize
:
df.set_index(['brand','description']).index.factorize()[0]+1
Output:
0 1
1 2
2 3
3 4
4 5
5 1
所以你可以试试这个,把它分配给第一列:
df.insert(loc=0, column='product_key', value=df.set_index(['brand','description']).index.factorize()[0]+1)
Output:
df
product_key brand description former_price discounted_price
0 1 A icecream 1099.0 855.0
1 2 A cheese 469.0 375.0
2 3 B catfood 179.0 119.0
3 4 C NaN 699.0 399.0
4 5 NaN icecream 769.0 549.0
5 1 A icecream 769.0 669.0
与groupby+ngroup
:
(df.fillna({'brand':'','description':''})
.groupby(['brand','description'],sort=False).ngroup()+1)
0 1
1 2
2 3
3 4
4 5
5 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.