我遇到了一个特定的问题,我有一个ID号的数据帧.其中一些账号已删除前导零.

ID
345
345
543
000922
000345
000345
000543

所以我想做的是创建一个通用的方法来判断我们是否删除了前导零.所以基本上,在我的真实数据集中会有数百万行.所以我想用pandas方法来说明ID的某个部分是否与一个部分的零相匹配,从而将其放入另一个数据帧中,以便我可以进一步判断.

我是这样做的:

new_df = df.loc[df['ID'].isin(df['ID'])]

我的理由是,我想过滤该数据集,以确定是否有任何ID在完整的ID中.

现在我有了

ID
345
345
543
000345
000345
000543

我可以用一个.unique()获取每个唯一组合的系列.

ID
345
543
000345
000543

对于小数据集来说,这很好.但对于数以百万计的人来说,我想知道怎样才能更容易地进行这项判断.

我试图找到一种方法来创建一个字典,其中键是3位数字,值是它的完整ID.反之亦然.

注意:它并不总是3位数.例如,可以是4567,其中实际值为004567.

推荐答案

使用:

print (df)
       ID
0     345
1     345
2     540
3    2922
4  002922
5  000344
6  000345
7  000543

#filter ID starting by 0 to Series
d = df.loc[df['ID'].str.startswith('0'), 'ID']
#create index in Series with remove zeros from left side
d.index = d.str.lstrip('0')
print (d)
ID
2922    002922
344     000344
345     000345
543     000543
Name: ID, dtype: object

#dict all possible values
print (d.to_dict())
{'2922': '002922', '344': '000344', '345': '000345', '543': '000543'}

#compare if exist indices in original ID column and create dict
d = d[d.index.isin(df['ID'])].to_dict()
print (d)
{'2922': '002922', '345': '000345', '543': '000543'}

Python相关问答推荐

在Pandas DataFrame操作中用链接替换'方法的更有效方法

从spaCy的句子中提取日期

将输入聚合到统一词典中

转换为浮点,pandas字符串列,混合千和十进制分隔符

在单个对象中解析多个Python数据帧

在matplotlib中删除子图之间的间隙_mosaic

在输入行运行时停止代码

如何将数据帧中的timedelta转换为datetime

关于两个表达式的区别

并行编程:同步进程

如何按row_id/row_number过滤数据帧

递归函数修饰器

用fft计算指数复和代替求和来模拟衍射?

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

根据过滤后的牛郎星图表中的数据计算新系列

高效地计算数字数组中三行上三个点之间的Angular

当lambda函数作为参数传递时,pyo3执行

Pandas查找给定时间戳之前的最后一个值

逐个像素图像处理的性能问题(枕头)

在伪子进程中模拟标准输出.打开