pandas - 根据 Pandas 中两列之间的匹配查找值
问题描述
我有这个数据
import pandas as pd
data = {'Code': ['20','22','21','21','21','21','20','20','20','20'],
'Code2': ['1', '5', '2', '', '2', '2', '1', '', '1', '1']}
df = pd.DataFrame (data, columns = ['Code','Code2'])
Code Code2
0 20 1
1 22 5
2 21 2
3 21
4 21 2
5 21 2
6 20 1
7 20
8 20 1
9 20 1
我正在尝试Code2
根据以前的关联填充缺失的值。所以,我知道什么时候Code
是 20,Code2
是 1,什么时候Code
是 21,Code2
是 2。我的输出应该是这样的:
Code Code2
0 20 1
1 22 5
2 21 2
3 21 2
4 21 2
5 21 2
6 20 1
7 20 1
8 20 1
9 20 1
我想我可以使用一些连接来做到这一点,但如果可能的话,我会热衷于使用一个衬垫。
解决方案
使用drop_duplicates
和map
:
data = {'Code': ['20','22','21','21','21','21','20','20','20','20'],
'Code2': ['1', '5', '2', '', '2', '2', '1', '', '1', '1']}
df = pd.DataFrame (data, columns = ['Code','Code2'])
m = df.drop_duplicates('Code').set_index('Code')['Code2']
df['Code2'] = df['Code'].map(m)
df
输出:
Code Code2
0 20 1
1 22 5
2 21 2
3 21 2
4 21 2
5 21 2
6 20 1
7 20 1
8 20 1
9 20 1
推荐阅读
- python - 如何使用 Python 进行 DNS 查找,除了 dnspython
- python - 尽管在本地生成 Sphinx 文档时出现了一些 Python 模块,但它们并没有出现在 readthedocs.io 上
- npm - 无法从 Github 发布 npm 包?
- vue.js - 为什么我的请求适用于邮递员,但不适用于 vue.js axios?
- python - 使用 Python 在 Plotly 中出现频率的直方图
- node.js - AppEngine Nodejs 未将 HTTP 重定向到 HTTPS
- javascript - 如果用户提交他们未授权的内容,返回服务器错误是不是很糟糕?
- xml - GoLang XML 编组自定义(不带根元素的编组)
- excel - 使用 Python 从 excel 单元格中检索格式化的字符串
- java - Java 输入验证,只循环两次,不检测大写/小写字符