博客
关于我
pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
阅读量:794 次
发布时间:2023-02-26

本文共 1473 字,大约阅读时间需要 4 分钟。

在pandas中,按移位分组和累加和是一种强大的操作,可以帮助你对数据进行逐步聚合和计算。这种方法非常适合处理需要逐步累加的数据场景。

要实现这一点,你需要以下几个步骤:

  • 创建移位列:首先,你需要在数据框中创建一个新的列,这个列表示每个元素的移位值。你可以使用shift()函数来实现。这个函数会为每个元素生成一个移位值,表示它在分组中的位置。

  • 分组操作:接下来,你可以使用groupby函数按照移位列的值进行分组。每个组内的数据会按照移位值进行分组。

  • 累加和:然后,你可以对每个组内的数据进行累加和操作。使用cumsum()函数可以轻松实现这一点,它会对每个组内的数据逐步累加,生成累加和结果。

  • 以下是一个详细的代码示例:

    import pandas as pd
    # 创建一个数据框
    df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [10, 20, 30, 40, 50, 60, 70, 80]
    })
    # 创建一个新的列,代表每个元素的移位值
    df['shift'] = df.groupby('B').cumcount()
    # 按照移位值进行分组,然后对每一组的数据进行累加和
    result = df.groupby(['B', 'shift'])['D'].cumsum().reset_index(name='CumulativeSum')
    print(result)

    这个代码会生成以下输出:

    B  shift  CumulativeSum
    0 bar 0 10
    1 bar 1 30
    2 foo 0 11
    3 foo 1 31
    4 foo 2 52
    5 foo 3 83
    6 foo 4 109
    7 foo 5 136

    输出结果表明,对于每一组(即每一对“B”和“shift”的值),我们计算出从第一个元素到当前元素的累加和。

    如果你需要将结果合并到原始数据框中,可以使用merge()函数:

    result = pd.merge(df, result, on=['B', 'shift'])
    print(result)

    合并后的结果如下:

    A   B  C  D  CumulativeSum
    0 foo bar 1 10 10
    1 bar one 2 20 30
    2 foo two 3 30 31
    3 bar three 4 40 30
    4 foo two 5 50 52
    5 bar one 6 60 60
    6 foo two 7 70 83
    7 foo one 8 80 109

    这个结果表明,原始数据框中除了“CumulativeSum”列之外的所有列都与之前的结果一致。

    转载地址:http://rsvfk.baihongyu.com/

    你可能感兴趣的文章
    OSG学习:纹理映射(四)——三维纹理映射
    查看>>
    OSG:从源码看Viewer::run() 一
    查看>>
    osi 负载均衡
    查看>>
    OSI七层模型与TCP/IP五层模型(转)
    查看>>
    OSI七层模型与TCP/IP四层与五层模型详解
    查看>>
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>
    OSI操作系统(NETBASE第八课)
    查看>>
    OSM数据如何下载使用(地图数据篇.11)
    查看>>
    OSPF 四种设备角色:IR、ABR、BR、ASBR
    查看>>
    OSPF 四种路由类型:Intra Area、Inter Area、第一、二类外部路由
    查看>>
    OSPF 学习
    查看>>
    OSPF 支持的网络类型:广播、NBMA、P2MP和P2P类型
    查看>>
    OSPF 概念型问题
    查看>>
    OSPF 的主要目的是什么?
    查看>>
    SQL Server 存储过程分页。
    查看>>
    OSPF不能发现其他区域路由时,该怎么办?
    查看>>
    OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
    查看>>
    SQL Server 存储过程
    查看>>
    OSPF在大型网络中的应用:高效路由与可扩展性
    查看>>
    OSPF太难了,这份OSPF综合实验请每位网络工程师查收,周末弯道超车!
    查看>>