2024-10-16 22:28:44 发布
网友
我有一个表,我必须在纽约映射两个值,CAits国内值,WT外部值,除此之外,它必须在海外映射
di = {"NY": "Domestic","CA": "Domestic","WT":"OUTSIDE"} df.replace({'Territory': di})
如何在上面的代码中给出OVERSEAS。因此,默认情况下,它没有(字典中没有)到海外
OVERSEAS
使用^{}返回不匹配值的缺失值,因此添加了^{}以将其替换为默认值:
df = pd.DataFrame({'Territory':['NY','CA','WT','SK','DE']}) di = {"NY": "Domestic","CA": "Domestic","WT":"OUTSIDE"} print (df) Territory 0 NY 1 CA 2 WT 3 SK 4 DE df['Territory'] = df['Territory'].map(di).fillna('OVERSEAS') print (df) Territory 0 Domestic 1 Domestic 2 OUTSIDE 3 OVERSEAS 4 OVERSEAS
虽然jezrael'sanswer可以工作,但它比需要的慢,因为它必须首先进行映射,然后返回并填充缺少的元素。如果我们利用Python的内置字典,我们可以显著提高性能
有两种方法可以利用python字典对象的灵活性来创建默认值。一个是使用映射字典上的get method,另一个是使用defaultdict object from collections。如上所述,get和defaultdict方法的优点是,它们避免了在映射后回顾整个系列以替换NAs,而是在映射步骤本身内进行
get
defaultdict
因此,简而言之,我建议:
df = pd.DataFrame({'Territory':['NY','CA','WT','SK','DE']}) di = {"NY": "Domestic","CA": "Domestic","WT":"OUTSIDE"} df['Territory'] = df['Territory'].map(lambda x: di.get(x, 'OVERSEAS'))
支持此方法性能的一些时间安排包括:
df = pd.DataFrame({'Territory':['NY','CA','WT','SK','DE']}) di = {"NY": "Domestic","CA": "Domestic","WT":"OUTSIDE"} %timeit df['Territory'].map(lambda x: di.get(x, 'OVERSEAS')) >>> 138 µs ± 1.35 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each) from collections import defaultdict dd = defaultdict(lambda:'OVERSEAS') dd.update(di) %timeit df['Territory'].map(di) >>> 143 µs ± 2.17 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each) %timeit df['Territory'] = df['Territory'].map(di).fillna('OVERSEAS') >>> 657 µs ± 33.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
对于较大的词典,性能上的差异变得更加明显:
另外值得注意的是,如果没有默认值,那么在Pandas中只映射一个缺少术语的dict似乎很慢
%timeit df['Territory'].map(di) >>> 372 µs ± 11.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
使用^{} 返回不匹配值的缺失值,因此添加了^{} 以将其替换为默认值:
虽然jezrael'sanswer可以工作,但它比需要的慢,因为它必须首先进行映射,然后返回并填充缺少的元素。如果我们利用Python的内置字典,我们可以显著提高性能
有两种方法可以利用python字典对象的灵活性来创建默认值。一个是使用映射字典上的get method,另一个是使用defaultdict object from collections。如上所述,
get
和defaultdict
方法的优点是,它们避免了在映射后回顾整个系列以替换NAs,而是在映射步骤本身内进行因此,简而言之,我建议:
支持此方法性能的一些时间安排包括:
对于较大的词典,性能上的差异变得更加明显:
另外值得注意的是,如果没有默认值,那么在Pandas中只映射一个缺少术语的dict似乎很慢
相关问题 更多 >
编程相关推荐