在for循环中,我从多个列中提取第一个和最后一个值,以便可以使用这些值中的每一个来创建标量值,然后在数学上应用该标量值来创建新列。我的解决方法是将选择范围限制在每一列的头部或尾部,然后使用min()或max()将其转换为数值类型(整型或浮点型
for title, group in df.groupby('Test'):
x1 = min(group["Test Reading"].head(1))
x2 = max(group["Test Reading"].tail(1))
x3 = min(group["Test Point"].head(1))
x4 = max(group["Test Point"].tail(1))
R=(x2-x1)/(x4-x3) #linearization scalar
group['Test Point Error'] =100*(group['Test Reading']- (group['Test Point']*R+x1))/(x2-x1)代码还有其他问题,但我尝试在另一个问题(How do I use .loc with groupby so that creating a new column based on grouped data won't be considered a copy?)中解决这些问题。
发布于 2020-07-25 01:00:04
首先,我们通过测试对数据进行分组,并使用.agg获得Test_Point和Test_reading的第一个匹配项。我们将分组的df保存到一个新的变量df_agg中。
df_agg=df.groupby("Test).agg({"Test_Reading":["first","last"],"Test_Point":["first","last"]})我们展平列中的multindex:
df_agg.columns=["_".join(c) for c in df_agg.columns]我们对R进行计算:
df_agg["R"]=(df_agg["Test Reading_last"]-df_agg["Test Reading_first"])/(df_agg["Test_Point_last"]-df_agg["Test_Point_first"])我们在Test的值上将聚合df合并到原始df,因此我们对每个示例都有可用的。
df.merge(df_agg,on="Test")现在你有了R和x1的值...x4可用于所有示例,您可以运行您的公式。
df['Test Point Error'] =100*(df['Test Reading']- (df['Test Point']*df["R"]+df["Test Reading_first"]))/(df["Test Reading_last"]-df["Test Reading_first"])https://stackoverflow.com/questions/63076037
复制相似问题