python - 根据另一列 pandas 更改列的值
问题描述
我得到了一组这样的数据
name rank sub id
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 192 0001 2011920001
7 ELEVEN 192 0001 2011920001
7 ELEVEN 999 4417 2019994417
AAR bus 047 0003 2010470003
AAR bus 050 0004 2010500004
id公式是= 201 + rank + value。我想检查“名称”列是否具有相同的值,如果是,将“等级”和“子”列更改为该组名称中的最小值,以便所有“id”都相同
这就是我想要的
name rank sub id
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
7 ELEVEN 049 0001 2010490001
AAR bus 047 0003 2010470003
AAR bus 047 0003 2010470003
有什么办法可以解决这个问题
解决方案
GroupBy.transform
与指定列表中的列一起使用min
并重新分配:
df[['rank','sub','id']] = df.groupby('name')['rank','sub','id'].transform('min')
print (df)
name rank sub id
0 7 ELEVEN 049 0001 2010490001
1 7 ELEVEN 049 0001 2010490001
2 7 ELEVEN 049 0001 2010490001
3 7 ELEVEN 049 0001 2010490001
4 7 ELEVEN 049 0001 2010490001
5 7 ELEVEN 049 0001 2010490001
6 7 ELEVEN 049 0001 2010490001
7 7 ELEVEN 049 0001 2010490001
8 AAR bus 047 0003 2010470003
9 AAR bus 047 0003 2010470003
或者:
df[['rank','sub']] = df.groupby('name')['rank','sub'].transform('min')
df['id'] = '201' + df['rank'] + df['sub']
print (df)
name rank sub id
0 7 ELEVEN 049 0001 2010490001
1 7 ELEVEN 049 0001 2010490001
2 7 ELEVEN 049 0001 2010490001
3 7 ELEVEN 049 0001 2010490001
4 7 ELEVEN 049 0001 2010490001
5 7 ELEVEN 049 0001 2010490001
6 7 ELEVEN 049 0001 2010490001
7 7 ELEVEN 049 0001 2010490001
8 AAR bus 047 0003 2010470003
9 AAR bus 047 0003 2010470003
推荐阅读
- terraform - Terraform 应用失败并显示“无法读取 ssh 私钥:找不到密钥”
- java - 由于数组,Java Jackson 编码器类型不匹配
- python - 如何将来自 BeautifulSoup 的数据发送到 Python 中的数据库
- angular - 如何使用 Angular ngFor 按值对 JSON 数据进行分组?
- node.js - Primus 和异步插件
- typescript - 如何使用打字稿处理量角器中的无限滚动
- python - 导入 tensorflow 显示错误
- javascript - 创建一个简单的 Web 组件,注入 HTML 行并运行 JS 函数
- json - 无法在弹性搜索查询中使用 OR 条件
- android - 加速度计传感器给出的值太低: