python - 根据其他行和列更改单元格值
问题描述
我有一个Result
来自 SQL 查询的数据框:
Loc ID Bank
1 23 NULL
1 24 NULL
1 25 NULL
2 23 6
2 24 7
2 25 8
我试图将Loc == 1
BankLoc == 2
的值设置为相同时的 Bank ID
,结果是:
Loc ID Bank
1 23 6
1 24 7
1 25 8
2 23 6
2 24 7
2 25 8
这是我使用代码的地方,我知道结局非常简单,我只是无法围绕不涉及迭代每一行(9000〜)的解决方案。
result.loc[(result['Loc'] == '1'), 'bank'] = ???
解决方案
共同点
# Arguments,
_0th_level = 'Loc'
merge_key = 'ID'
value_key = 'Bank' # or a list of colnames or `slice(None)` to propagate all columns values.
src_key = '2'
dst_key = '1'
# Computed once for all,
df = result.set_index([_0th_level, merge_key])
df2 = df.xs(key=src_key, level=_0th_level, drop_level=False)
df1_ = df2.rename(level=_0th_level, index={src_key: dst_key})
第一种(天真的)方法
df.loc[df1_.index, value_key] = df1_
# to get `result` back : df.reset_index()
第二种(稳健)方法
如图所示,如果缺少一个或多个标签 [...] ,第一种方法可能是非法的(自 pandas 版本 1.0.0 起)。
因此,如果您必须确保在源和目标都存在索引,则以下内容仅在 shared 上执行ID
。
df1 = df.xs(key=dst_key, level=_0th_level, drop_level=False)
idx = df1.index.intersection(df1_.index) # <-----
df.loc[idx, value_key] = df1_.loc[idx, value_key]
推荐阅读
- ios - 有什么作用??在 Swift 案例中的变量声明上的意思是让模式匹配?
- git - 检查当前用户是否是 zsh 中 GitHub 远程的所有者
- spring-boot - 为什么它不允许我从 WebMvcConfigurer 接口覆盖 addViewControllers 方法?
- node.js - 结合 node (v11.15.0)、webpack 和 typescript 使用 worker_threads -> 找不到模块
- html - 如何将html表格列转换为电子邮件中特定宽度的行
- r - 将欧几里得距离更改为曼哈顿
- google-cloud-platform - Google Cloud 免费套餐将开始对静态或临时 IP 地址收费?
- java - 当我输入正确和错误的密码时没有发生任何事情
- apache-spark - 在 Databricks 上将评论修改为 Spark 表
- javascript - 如何从 NodeJS 运行 CLI 命令?