python - 什么是根据另一列中的值填充列的更有效方法
问题描述
假设我有一个数据框列“代码”,其中包含引用字典中数据的字符串,如下所示:
lst = ['a','b','c']*10000
df = pd.DataFrame({
'code':lst
})
ref = {
'a':{
'LONG':1,
'LAT':1,
'COUNTRY':1
},
'b':{
'LONG':2,
'LAT':2,
'COUNTRY':2
},
'c':{
'LONG':3,
'LAT':3,
'COUNTRY':3
}
}
我想创建 3 个新的数据框列,“Long”、“Lat”和“Country”,并根据它们在 ref 字典中的代码引用值填充这些列。
我目前的实现如下:
df = df.reindex(columns = df.columns.tolist() + ['Country','Long','Lat'])
start_time = time.time()
for index in df.index:
df.iloc[index,df.columns.get_loc('Country')]= ref[df.iloc[index,df.columns.get_loc('code')]]['COUNTRY']
df.iloc[index,df.columns.get_loc('Long')]= ref[df.iloc[index,df.columns.get_loc('code')]]['LONG']
df.iloc[index,df.columns.get_loc('Lat')]= ref[df.iloc[index,df.columns.get_loc('code')]]['LAT']
print("Time taken to run: %s seconds" % (time.time() - start_time))
然而,这似乎效率极低,在这个只有 30000 个条目的虚拟数据集上运行大约需要 40 秒。我的实际数据集包含多达 200 万行,甚至没有在一夜之间完成。任何建议将不胜感激,谢谢。
解决方案
它可能是这样的
df[['LONG', 'LAT', 'COUNTRY']] = pd.DataFrame(list(df["code"].map(ref)), index=df.index)
推荐阅读
- c# - 即使内容和代码最少,扩展 viewcell 的自定义控件也会引发 System.InvalidCastException
- sampling - R中随机变量的生成
- python - 无论我将变量更改为 str 还是 int,终端都会给我一个语法错误
- python - 如何使用 seaborn 科学记数法 facetgrid 和 catplot?
- apache-spark - 使用 pyspark 的 Zeppelin 段落在 1 小时后超时
- r - 无法使用 rvest 和 follow_link 自动化网络抓取过程
- javascript - 为什么要标记
- python - 将用户限制在一定范围内的值
- java - 集成测试因 cobertura 失败
- android - 如何在进行房间迁移时重命名列