在 Python 中计算校正因子
Calculate correction factor in Python
我有三个数据框:
true false category
36 25 3
40 25 3
46 23 3
40 22 5
42 20 4
56 39 3
50 40 3
44 27 4
51 39 5
54 31 5
50 38 4
我尝试为每个类别计算一个校正因子来校正“错误”值。
所以f.e。对于类别 5:
correction1 = 40/22 = 1.82
correction2 = 51/39 = 1.31
correction3 = 54/31 = 1.74
那么这些校正因子的算术平均值就是1.62。
因此,结果应该是每个类别的平均校正因子。
问题:Python/NumPy中是否有内置函数来计算这个?
您可以按如下方式进行:
(df['true'].div(df['false'])).groupby(df['category']).mean()
这只是构建比率,然后按 category
对它们进行分组,最终计算出 mean
。
获取测试数据:
from io import StringIO
infile= StringIO(
"""true false category
36 25 3
40 25 3
46 23 3
40 22 5
42 20 4
56 39 3
50 40 3
44 27 4
51 39 5
54 31 5
50 38 4""")
df= pd.read_csv(infile, sep='\s+', dtype='int16')
结果是:
category
3 1.545179
4 1.681806
5 1.622603
dtype: float64
如果您想坚持使用 numpy:
import numpy as np
ratio = np.array(df1) / np.array(df2)
df3 = np.array(df3)
mean = {c : np.mean(ratio[df3 == c]) for c in set(df3)}
您的数据示例输出:
{3: 1.5451794871794873, 4: 1.68180636777128, 5: 1.6226032032483646}
但我确实喜欢 jottbe 的回答,如果您已经在使用 pandas 那么可能就是这样。
我有三个数据框:
true false category
36 25 3
40 25 3
46 23 3
40 22 5
42 20 4
56 39 3
50 40 3
44 27 4
51 39 5
54 31 5
50 38 4
我尝试为每个类别计算一个校正因子来校正“错误”值。 所以f.e。对于类别 5:
correction1 = 40/22 = 1.82
correction2 = 51/39 = 1.31
correction3 = 54/31 = 1.74
那么这些校正因子的算术平均值就是1.62。 因此,结果应该是每个类别的平均校正因子。
问题:Python/NumPy中是否有内置函数来计算这个?
您可以按如下方式进行:
(df['true'].div(df['false'])).groupby(df['category']).mean()
这只是构建比率,然后按 category
对它们进行分组,最终计算出 mean
。
获取测试数据:
from io import StringIO
infile= StringIO(
"""true false category
36 25 3
40 25 3
46 23 3
40 22 5
42 20 4
56 39 3
50 40 3
44 27 4
51 39 5
54 31 5
50 38 4""")
df= pd.read_csv(infile, sep='\s+', dtype='int16')
结果是:
category
3 1.545179
4 1.681806
5 1.622603
dtype: float64
如果您想坚持使用 numpy:
import numpy as np
ratio = np.array(df1) / np.array(df2)
df3 = np.array(df3)
mean = {c : np.mean(ratio[df3 == c]) for c in set(df3)}
您的数据示例输出:
{3: 1.5451794871794873, 4: 1.68180636777128, 5: 1.6226032032483646}
但我确实喜欢 jottbe 的回答,如果您已经在使用 pandas 那么可能就是这样。