我有两个功能:
errorLim = 0.3
def getQ(x):
q = math.log(1.0- erf(abs(x)/SQRT2))
return q
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
我有一个名为expAtoms
的文件,它是这样的:
3.H5 5.40077
2.H8 7.75894
3.H6 7.60437
3.H5 5.40001
5.H5 5.70502
5.H6 7.96472
""
""
6.H6 7.96178
6.H5 5.71068
如何将第一列中的值分组并查看它们是否相同,如果相同,则取第二列中值的平均值。例如3.H5
重复,所以取5.40077
和5.40001
的平均值,并将其用作我的getQMulti
程序中的peakAvg
。本例中的平均值为5.40039,ppm
值为5.40077
和5.40001
import pandas as pd
expAtoms = 'expAtoms.txt'
df2 = pd.read_table(expAtoms,delimiter = " ", header = None)
df2.rename(columns={0:"atom",1:"value"}, inplace=True)
df2.groupby('atom').value.mean()
for atom in df.atom.unique():
ppm = df.where(df.atom==atom).value.dropna()
peakAvg = ppm.mean()
getQMulti(ppm,peakAvg,errorLim)
在Python中,您可以使用以下简单的位逐行读取文件:
请记住,这假设列由空格分隔。在那里,我将把这些值保存在字典中,以便将来在查找左侧值匹配的行时检查它们(这一步有很大的优化空间,但这是一个单独的问题)。你知道吗
试试这个:
请注意,此代码期望您的文件只包含表,而不包含头或其他任何内容。你知道吗
如果要提取特定值:
但是您可能应该更改您的函数以添加
peakAvg
作为参数,这样您就可以将值传递给函数。你知道吗编辑:
为了在所有值上迭代应用函数,如下所示:
但是请注意,您的函数必须处理类似数组的结构,因此您可能必须使用
numpy
而不是math
来实现它。你知道吗相关问题 更多 >
编程相关推荐