我有多索引电子表格格式的测量数据,需要通过将列的每个值除以相应的参考值来计算范数
如何使用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()
也许有更优雅的方法
目前没有回答
相关问题 更多 >
编程相关推荐