【问题标题】:How write a for loop with min/max per group, thencalculate with those values by a groups for all those values in a group?如何编写每个组的最小值/最大值的 for 循环,然后用一组值计算组中所有这些值的值?
【发布时间】:2020-05-06 03:59:47
【问题描述】:

我有一个包含以下列的 CSV 文件:UniqueWellIdentifier(UWI);深度;孔隙率(PHI);中性计数(NEUT)。

对于每个 UWI,我需要知道 NEUT 最大值和最小值是多少,以确定每个 UWI 组的斜率和截距。每个 UWI 都会有一个稍微不同的变换用于 NEUT 列。因此,每口井都会有不同的 NEUT 最大值/最小值、坡度、截距,并且它将对该特定井的整个 NEUT 列使用该变换,然后继续进行下一个。

这些是我引用的经典步骤:

  1. 坡度 = (log (PHIHI / PHILO)) / (CPSLO - CPSHI)

  2. INTCPT = PHIHI / (10^ (CPSLO * SLOPE))

  3. NEUTPOR = INTCPT * 10^ (SLOPE * NEUT)

CPSHI = 每口井的最大中子计数 (NEUT) 值 (UWI)

CPSLO = 每口井的最小中子计数 (NEUT) 值 (UWI)

PHIHI = 整个数据集的最小平均 PHI

PHILO = 整个数据集的最小平均 PHI

这是我目前想出的:

q = pd.read_csv('DataFile.csv')

grouped = q.groupby(['UWI'])
for key_uwi in grouped:
    CPSHI = key_uwi.NEUT.min()
    CPSLO = key_uwi.NEUT.max()
    y = np.array([PHILO, PHIHI])
    y = 10**(y / 10.0)
    x = np.array([CPSHI, CPSHLO], 1)
    key_uwi.loc[q.UWI ==key_uwi] = key_uwi.NEUTPOR = [p[i] for i in key_uwi.NEUT]
    q['NEUTPOR'] = NEUTPOR

我收到错误:“元组”对象没有属性“NEUT”

最大的问题是我需要每个 UWI 组的最大和最小 NEUT,然后分别对每个 UWI 的整个 NEUT 列运行 y = mx+b 变换。

我什至不知道我是否正确地执行了 for 循环,我什至不确定要查找什么来找到我正在寻找的内容,以获得更多帮助。任何朝着正确方向的推动都会有所帮助。

【问题讨论】:

  • 您的文字很长。你能去掉所有的背景信息,专注于实际问题吗?
  • 我会改写,看看能不能删减。
  • 我把描述删减了很多,希望这足够清楚。如果您有任何问题,请告诉我。
  • 还是太多了。相关的只有代码和错误消息。缺少的是完整的错误回溯以及q 是什么。

标签: python python-3.x for-loop pandas-groupby


【解决方案1】:

考虑使用groupby().apply() 调用,因为您正在运行具有多个聚合的计算。以下可能需要对样本数据进行测试:

PHIHI = q.groupby(['UWI'])['XPHI'].max().mean() 
PHILO = q.groupby(['UWI'])['XPHI'].min().mean()

def calc_np(grp):
   PHI_Maxes = grp['XPHI'].max() 
   PHI_Mins = grp['XPHI'].min() 
   CPSHI = grp['NEUT'].min() 
   CPSLO = grp['NEUT'].max()

   SLOPE = (np.log(PHIHI / PHILO)) / (CPSLO - CPSHI)
   INTCPT = PHIHI / (10**(CPSLO * SLOPE))
   NEUTPOR = INTCPT * 10**(SLOPE * grp['NEUT'])

   return pd.Series(NEUTPOR)

# CALCULATE NEW COLUMN ZBY GROUP
q['NEUTPOR'] = q.groupby(['UWI']).transform(calc_np)

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多