如何计算多指标DF的选择范数

2024-06-24 13:42:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多索引电子表格格式的测量数据,需要通过将列的每个值除以相应的参考值来计算范数

如何使用Python高效且“可读”地实现这一点,即如何过滤正确的参考值以计算标准值

以下是输入数据:

            result
var     run     ID  
10  1   A   10
        B   50
    2   A   30
        B   70
20  1   A   100
        B   500
    2   A   300
        B   700
30  1   A   1000
        B   5000
    2   A   3000
        B   7000

这就是期望的结果:

            normed
var     run     ID  
10  1   A   0.1
        B   0.1
    2   A   0.1
        B   0.1
20  1   A   1.0
        B   1.0
    2   A   1.0
        B   1.0
30  1   A   10.0
        B   10.0
    2   A   10.0
        B   10.0

可以看出,var=20是参考值,但是它变得更加复杂,因为有两个运行(1和2)和两个设备在测试中

当使用DF.reset#index()展平DF时,我可以创建一个掩码df[df['var' == 20](请参见注释#1),但我不知道如何从这里开始

非常感谢您的帮助

更新

我在for循环中找到了一个使用query()的解决方案:

df_norm = pd.DataFrame()
df_flat = df.reset_index()
var_ref = 20
for ident in 'A','B':
    for run in 1,2:
        q = f'var == {var_ref} & run == {run} & ID == "{ident}"'
        ref = df_flat.query(q)
        #ref
        #ref.result
        #ref.result.iloc[0]
        q = f'run == {run} & ID == "{ident}"'
        df_m = df_flat.query(q)
        norm = df_m.result / ref.result.iloc[0]
        #norm
        df__ = pd.DataFrame(norm.rename('norm'))
        df__ = df_flat.merge(df__, left_index=True, right_index=True)
        df_norm = pd.concat([df_norm, df__])

df_norm.sort_index()

也许有更优雅的方法


Tags: 数据runrefidnormdfforindex