我有这个功能:
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
并且此QMulti
函数使用另一个名为getQ(x)
的函数,如下所示:
def getQ(x):
q = math.log(1.0- erf(abs(x)/SQRT2))
return q
我有一个名为expAtoms的文件,它看起来像这样:
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
如何实现此功能?我目前有代码读取expAtoms
的第一列,查看是否有任何值重复,然后如果有,则取平均值并将其输出到文件。
在我的功能中,我有ppm-peakAvg
。我当前的代码给出了平均值,我想为我的expAtoms
文件中的每个原子计算这个函数。
这是我的代码:
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)
我希望我的输出看起来像这样,那么如何添加一个计算此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