首页 > 后端开发 > Python教程 > 如何在不使用回调函数的情况下有效地向分组的 Pandas DataFrame 添加顺序计数器列?

如何在不使用回调函数的情况下有效地向分组的 Pandas DataFrame 添加顺序计数器列?

Linda Hamilton
发布: 2025-01-01 02:12:16
原创
937 人浏览过

How to Efficiently Add a Sequential Counter Column to Grouped Pandas DataFrames Without Using a Callback Function?

在没有回调的情况下向分组 DataFrame 添加顺序计数器列

当尝试向 DataFrame 内的组添加顺序计数器列时,回调函数可能不是最有效的方法。考虑以下 DataFrame:

df = pd.DataFrame(
    columns="index c1 c2 v1".split(),
    data=[
            [0,  "A",  "X",    3, ],
            [1,  "A",  "X",    5, ],
            [2,  "A",  "Y",    7, ],
            [3,  "A",  "Y",    1, ],
            [4,  "B",  "X",    3, ],
            [5,  "B",  "X",    1, ],
            [6,  "B",  "X",    3, ],
            [7,  "B",  "Y",    1, ],
            [8,  "C",  "X",    7, ],
            [9,  "C",  "Y",    4, ],
            [10,  "C",  "Y",    1, ],
            [11,  "C",  "Y",    6, ],]).set_index("index", drop=True)
登录后复制

目标是创建一个新列“seq”,其中包含每个组的连续数字,从而产生以下输出:

   c1 c2  v1  seq
0   A  X   3    1
1   A  X   5    2
2   A  Y   7    1
3   A  Y   1    2
4   B  X   3    1
5   B  X   1    2
6   B  X   3    3
7   B  Y   1    1
8   C  X   7    1
9   C  Y   4    1
10  C  Y   1    2
11  C  Y   6    3
登录后复制

避免回调函数:

我们可以利用 cumcount() 而不是使用回调函数方法更有效地实现相同的结果。 cumcount() 计算组中每个唯一值出现的次数,并返回包含累积计数的 pandas Series。

df["seq"] = df.groupby(['c1', 'c2']).cumcount() + 1
登录后复制
登录后复制

这种方法直接修改 DataFrame,避免了回调函数的开销。

自定义起始编号:

如果您希望排序从 1 开始您可以将结果加 1,而不是 0:

df["seq"] = df.groupby(['c1', 'c2']).cumcount() + 1
登录后复制
登录后复制

通过利用 cumcount() 方法,我们简化了向分组数据帧添加顺序计数器列的过程,从而提高了可读性和性能。

以上是如何在不使用回调函数的情况下有效地向分组的 Pandas DataFrame 添加顺序计数器列?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板