python-3.x - 为对应于两列的匹配创建一个唯一 id
问题描述
我想创建一个列,该列生成一个与我的数据框中的两个列匹配的唯一 ID。
下面是示例数据框:
df = pd.DataFrame({'month': [1, 2, 1, 3,4,5], 'brand': [76, 76, Arco, Shell, Arco, Cheveron],'address': [aa, aa, ab, bc, cd,de]})
我想要一个既匹配品牌又匹配地址但不匹配月份的索引
df = pd.DataFrame({ 'id':[1,1,2,3,4,5] 'month': [1, 2, 1, 3,4,5], 'brand': [76, 76, Arco, Shell, Arco, Cheveron],'address': [aa, aa, ab, bc, cd,de]})
解决方案
DataFrame.insert
与 一起使用GroupBy.ngroup
:
df.insert(0, 'id', df.groupby(['brand','address'], sort=False)['month'].ngroup() + 1)
print (df)
id month brand address
0 1 1 76 aa
1 1 2 76 aa
2 2 1 Arco ab
3 3 3 Shell bc
4 4 4 Arco cd
5 5 5 Cheveron de
或将列连接在一起并使用factorize
:
s = df['brand'].astype(str) + '-' + df['address'].astype(str)
df.insert(0, 'id', pd.factorize(s)[0] + 1)
推荐阅读
- sharepoint-2013 - 在 powerapps 中自定义默认 sharepoint 表单在发布到 sharepoint 后不保存
- jquery - 如何解决数据表警告“请求未知参数 {parameterName} for row[i],column[j]”?
- c# - C# Lazy 属性在构造函数上初始化
- jenkins - 如何在詹金斯中自动增加 XML elt 值
- joomla - 是否可以在 joomla 字段中上传多个图像?
- docker - 如何让 Jenkins 从容器中调用 docker
- unity3d - 将随机文本分配给敌人
- javascript - Jest 使用 JavaScript 测试和更改属性值
- tensorflow - 为什么在模型上加载保存的权重时会出现问题
- javascript - 获取托管在不同 HTTPS 域上的 iframe 的高度