我有一个这样的数据帧,

  Name COST      Timestamp
0   c   8   2023-09-20 15:14:46
1   a   8   2023-09-20 15:14:48
2   c   9   2023-09-20 15:14:55
3   b   10  2023-09-20 15:15:00
4   c   4   2023-09-20 15:15:02
5   a   9   2023-09-20 15:15:04
6   b   3   2023-09-20 15:15:12
7   a   3   2023-09-20 15:15:17
8   c   6   2023-09-20 15:15:20
9   c   6   2023-09-20 15:15:29

我想要的是创建一个新的数据帧.它将查找a、b、c的序列(这里顺序并不重要),sum_ost是a、b、c的成本之和,它的时间戳将是a、b、c的最后一个时间戳.如果多个条目具有相同的名称,如b、c、c、b、b,则取最后一个c,然后取最后一个b和a.

An detailed example:

给定数据帧的输出应该是这样构造的,对于第一个数据帧,它将取索引1的‘a’、索引2的‘c’(因为这是在索引0的‘c’之后)和索引3的‘b’,对于该组,sum_ost将是27,时间戳将是2023-09-20 00:14:26,它是索引3的‘b’,因为它最后一次出现在该组.下一组将取索引4的‘c’、索引5的‘a’和索引6的‘b’,sum_ost将是16,时间戳将是2023-09-20 00:06:51,因为它是该序列的最后一次出现的索引6的‘b’.

输出将如下所示,

 sum_cost   Timestamp
0   27  2023-09-20 15:15:00
1   16  2023-09-20 15:15:12

请帮我拿一下这个.谢谢!

推荐答案

您需要构建一个定制的Grouper,因此需要一个循环,这里使用一个定制函数:

def group_consecutive(s, target):
    out = []
    i = 0

    g = 1
    while i < len(s)-len(target)+1:
        if target == set(s.iloc[i:i+len(target)]):
            out.extend([g]*len(target))
            g += 1
            i += len(target)
        else:
            out.append(0)
            i += 1
    out.extend([0]*(len(target)-1))

    return pd.Series(out, index=s.index)

group = group_consecutive(df['Name'], {'a', 'b', 'c'})

out = df[group>0].groupby(group).agg({'COST': 'sum', 'Timestamp': 'last'})

输出:

   COST            Timestamp
1    27  2023-09-20 15:15:00
2    16  2023-09-20 15:15:12

中级与集团:

  Name  COST            Timestamp  group
0    c     8  2023-09-20 15:14:46      0
1    a     8  2023-09-20 15:14:48      1
2    c     9  2023-09-20 15:14:55      1
3    b    10  2023-09-20 15:15:00      1
4    c     4  2023-09-20 15:15:02      2
5    a     9  2023-09-20 15:15:04      2
6    b     3  2023-09-20 15:15:12      2
7    a     3  2023-09-20 15:15:17      0
8    c     6  2023-09-20 15:15:20      0
9    c     6  2023-09-20 15:15:29      0

Python相关问答推荐

将大小为n*512的数组绘制到另一个大小为n*256的数组的PC组件

在Python中是否可以输入使用任意大小参数列表的第一个元素的函数

KNN分类器中的GridSearchCV

根据给定日期的状态过滤查询集

Pystata:从Python并行运行stata实例

根据在同一数据框中的查找向数据框添加值

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

如何请求使用Python将文件下载到带有登录名的门户网站?

如何在Python脚本中附加一个Google tab(已经打开)

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如何在Polars中从列表中的所有 struct 中 Select 字段?

形状弃用警告与组合多边形和多边形如何解决

将JSON对象转换为Dataframe

如何使用SentenceTransformers创建矢量嵌入?

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

Tkinter菜单自发添加额外项目

如何使用两个关键函数来排序一个多索引框架?

如何在BeautifulSoup/CSS Select 器中处理regex?

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''