python - 如何用“NA”填写两个列表之间的差异
问题描述
我有一堆我必须比较的c
pythone
列表,在这种情况下,e
列表长度总是大于或等于c
列表。我想做的是比较这两个列表,如果它们的长度不相等,我想c
用“NA”填写列表“间隙”。
例如,如果我们查看这两个列表:
e = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']
c = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']
我希望 c 列表为它缺少的值填写“NA”(并保留顺序),如下所示:
c = ['NA', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', 'NA']
解决方案
我会用熊猫和pd.Series.where
面具。首先将它们转换为 series e = pd.Series(e)
,然后
s = pd.concat([e,c],sort=True).drop_duplicates() #remove sort=True for versions < 0.23
s.where(s.isin(c))
输出
0 NaN
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 NaN
您还可以遵循经典的纯 Python 方法。使用两个指针,同时遍历它们并比较值。
p1 = 0
p2 = 0
f = []
while (p1 < len(e)) and (p2 < len(c)):
vale = e[p1]
valc = c[p2]
if vale < valc:
f.append('NA')
p1 += 1
elif vale == valc:
f.append(valc)
p1 += 1
p2 += 1
else:
p2 += 1
if p1 == len(e): f.extend(c[p2:])
if p2 == len(c): f.extend(['NA']*(len(e)-p1))
推荐阅读
- php - 更新嵌套数组中的单个字段值而不修改其他字段值?
- android - bundle.containskey("xx") 返回 true 但系统抛出 npe
- git - 更改 GitLab 的安装目录
- android - 动态特征模块第三方库无法访问资源
- java - 使用java将数据从Dynamo DB推送到elasticsearch
- c# - 如何使用 Entity Framework 6 创建内存中的 DbContext?
- python - 获取匹配记录的索引
- linux - Crontab 覆盖 kitchen.sh pentaho 的工作
- node.js - TCP还是UDP?视频流的制作延迟
- r - 使用R找到两个具有四个未知数的非线性方程的决策边界