我有一个如下 struct 的df,其中A是分类变量,t是秒数,X是期望的输出:

A t X
1 0.0 0
1 3.2 3.2
1 3.9 3.9
1 18.0 18
1 27.4 27.4
3 47.4 0
3 50.2 2.9
3 57.2 9.8
3 64.8 17.4
3 76.4 29.1
2 80.5 0
1 85.3 0
1 87.4 2.1

我希望X是自A列更改值以来的秒数.

我可以在一个大的for循环中做到这一点,但它太慢/计算成本太高.

我试图通过执行以下操作来获取更改后的行数,但并不完全正确,并且不确定如何从那里为更改建立索引:

g = df[A].transform(lambda x: x.diff().ne(0).cumsum())    
df[X] = df[A].cumcount() + 1

推荐答案

使用groupby.transform('first')获得每个组的第一个值,然后从t中减go 以下值:

# group consecutive values
group = df['A'].ne(df['A'].shift()).cumsum()

df['X'] = df['t'].sub(df.groupby(group)['t'].transform('first'))

输出:

    A     t     X
0   1   0.0   0.0
1   1   3.2   3.2
2   1   3.9   3.9
3   1  18.0  18.0
4   1  27.4  27.4
5   3  47.4   0.0
6   3  50.2   2.8
7   3  57.2   9.8
8   3  64.8  17.4
9   3  76.4  29.0
10  2  80.5   0.0
11  1  85.3   0.0
12  1  87.4   2.1

Python相关问答推荐

从收件箱获取特定列中的重复行

只需使用Python在图像中保留 colored颜色 范围区域

为什么我的主页不会重定向到详细视图(Django)

Python中的锁定类和线程以实现dict移动

Flask:如何在完整路由代码执行之前返回验证

如何从格式为note:{neighbor:weight}的字典中构建networkx图?

如何处理必须存在于环境中但无法安装的Python项目依赖项?

在Python中管理多个OpenGVBO和VAO实例

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

删除最后一个pip安装的包

Python上的Instagram API:缺少client_id参数"

对于一个给定的数字,找出一个整数的最小和最大可能的和

_repr_html_实现自定义__getattr_时未显示

如何记录脚本输出

在线条上绘制表面

对所有子图应用相同的轴格式

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

基于索引值的Pandas DataFrame条件填充

如何在表中添加重复的列?