优化Pandas计算Vshale代码:无需新增GRmin/GRmax列的高效方案
高效计算Vshale的优化方案
嘿,我来帮你简化这段计算Vshale的代码!你原来的方法需要先聚合再合并,其实用Pandas的transform方法就能一步到位,完全不用新增GRmin、GRmax列,代码更简洁还更高效。
优化后的代码
import pandas as pd # 初始化原始数据 df = pd.DataFrame( [['A', 80], ['A', 64], ['A', 55], ['B', 56], ['B', 89], ['B', 73], ['C', 78], ['C', 100], ['C', 150], ['C', 76], ['C', 87]], columns=['Well', 'GR'] ) # 直接计算Vshale,无需中间合并步骤 grouped_gr = df.groupby('Well')['GR'] df['Vshale'] = (df['GR'] - grouped_gr.transform('min')) / (grouped_gr.transform('max') - grouped_gr.transform('min')) # 输出结果 print(df)
为什么这样更高效?
transform方法会对每个Well分组计算GR的最小/最大值,然后自动把结果广播回原DataFrame的对应行,省去了单独生成聚合表再合并的步骤。- 我们先把
groupby('Well')['GR']存成变量grouped_gr,避免重复执行分组操作,在数据量较大时能明显提升性能。
结果验证
运行后得到的Vshale列和你期望的完全一致:
- 比如Well A的GRmin=55、GRmax=80,80对应的Vshale为
(80-55)/(80-55)=1,64对应(64-55)/25=0.36,完全符合预期。 - Well C的GRmin=76、GRmax=150,78对应的Vshale为
(78-76)/(150-76)=2/74≈0.027027027,和你给出的结果一致。
内容的提问来源于stack exchange,提问作者elli
相关产品推荐
相关产品推荐

