首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分别获取groupby列中的第一个和最后一个值?

如何分别获取groupby列中的第一个和最后一个值?
EN

Stack Overflow用户
提问于 2020-07-24 22:49:42
回答 1查看 26关注 0票数 0

在for循环中,我从多个列中提取第一个和最后一个值,以便可以使用这些值中的每一个来创建标量值,然后在数学上应用该标量值来创建新列。我的解决方法是将选择范围限制在每一列的头部或尾部,然后使用min()max()将其转换为数值类型(整型或浮点型

代码语言:javascript
复制
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?)中解决这些问题。

EN

回答 1

Stack Overflow用户

发布于 2020-07-25 01:00:04

首先,我们通过测试对数据进行分组,并使用.agg获得Test_Point和Test_reading的第一个匹配项。我们将分组的df保存到一个新的变量df_agg中。

代码语言:javascript
复制
df_agg=df.groupby("Test).agg({"Test_Reading":["first","last"],"Test_Point":["first","last"]})

我们展平列中的multindex:

代码语言:javascript
复制
df_agg.columns=["_".join(c) for c in df_agg.columns]

我们对R进行计算:

代码语言:javascript
复制
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,因此我们对每个示例都有可用的。

代码语言:javascript
复制
df.merge(df_agg,on="Test")

现在你有了R和x1的值...x4可用于所有示例,您可以运行您的公式。

代码语言:javascript
复制
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"])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63076037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档