【问题标题】:deleting loops to increase efficiency in python删除循环以提高python效率
【发布时间】:2021-04-06 04:19:39
【问题描述】:

如何提高效率?我觉得我应该能够在不遍历整个数据框的情况下做到这一点。基本上我必须将CollectType 列拆分为多个列,具体取决于SSampleCode 列中的值。

for i in range(0,len(df)):
  if df.SSampleCode[i]=='Rock':
     df.R_SampleType[i]=df.CollectType[i]
  elif df.SSampleCode[i]=='Soil':
     df.S_SampleType[i]=df.CollectType[i]
  elif df.SSampleCode[i]=='Pan Con':
     df.PC_SampleType[i]=df.CollectType[i]
  elif df.SSampleCode[i]=='Silt':
     df.SS_SampleType[i]=df.CollectType[i]

【问题讨论】:

  • 你应该重新考虑数据结构df,不管它是什么......它有四个数组字段,但是对于i 的每个值,4 个数组值中有3 个是未定义的。那里有些不对劲。看起来您可能想要一个包含 CollectType 和具有四个标记值之一的字符串的 2 元组数组。
  • 您可以使用字典,其中键是 SSampleCode 值,字典值是放置 CollectType 的列名。因为这是您的作业,所以您可以从那里获取。

标签: python performance loops


【解决方案1】:

这可以使用掩码(矢量方法)来完成:

for i in range(0,len(df)):
  if df.SSampleCode[i]=='Rock':
     df.R_SampleType[i]=df.CollectType[i]

将会

mask = df.SSampleCode=='Rock'
df.R_SampleType[mask] = df.CollectType[mask]

这会给你一个很好的性能改进。

【讨论】:

  • 谢谢!这正是我认为可能的,我只是对 python 太陌生,不知道语法。
猜你喜欢
  • 2019-10-11
  • 2015-10-08
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2019-03-07
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多