¿Cómo puedo implementar una función que creé que me obliga a leer desde un archivo?

Tengo esta función:

errorLim = 0.3 def getQMulti(ppm,errorLim): x = (ppm-peakAvg)/errorLim q = getQ(x) x0=2.0 q0=getQ(x0) QMulti = 1.0+(q/math.abs(q0)) return QMulti 

y esta función QMulti usa otra función llamada getQ(x) que es así:

 def getQ(x): q = math.log(1.0- erf(abs(x)/SQRT2)) return q 

Tengo un archivo llamado expAtoms y se parece a esto:

 3.H5 5.40077 3.H5 5.40001 5.H5 5.70502 4.H8 7.55438 5.H1' 5.43574 "" "" "" 6.H6 7.96178 6.H5 5.71068 

¿Cómo puedo implementar esta función? Actualmente tengo un código que lee la primera columna de expAtoms , ve si alguno de los valores se repite, y si lo hace, toma el promedio y lo envía a un archivo.

En mi función, tengo ppm-peakAvg . Mi código actual da el promedio, y quiero calcular esta función para cada átomo en mi archivo de expAtoms .

Este es mi código:

 import pandas as pd import os import sys exp = 'expAtoms.txt' df = pd.read_csv(exp, sep = ' ', header = None) df.columns = ["Atom","ppm"] df = df.dropna().reset_index(drop=True) df2 =pd.read_csv(pred, sep = r'\s+', header = None) df2.columns = ["Atoms","ppms","error"] gb = (df.groupby("Atom", as_index=False).agg({"ppm":["count","mean"]}).rename(columns={"count":"nVa", "mean":"avgppm"})) gb.head() gb.columns = gb.columns.droplevel() gb = gb.rename(columns={"":"Atom"}) gb.merge(df2, left_on='Atom', right_on='Atoms', how='left').drop(['Atoms','ppms'], axis=1) gb.to_csv("output.txt", sep =" ", index=False) 

Quiero que mi salida tenga este aspecto, así que, ¿cómo puedo agregar una columna que QMulti esta función QMulti ?:

  Atom nVa avgppm QMulti 7.H2 2 7.853 0.000 9.H2 2 7.458 0.000 20.H2 1 7.898 0.000 21.H2 1 8.113 0.000 8.H1' 2 5.238 0.002 22.H1' 2 5.523 0.002