将顺序计数器列添加到 Pandas DataFrame 中的组
在数据整理的上下文中,有一个常见任务是添加顺序计数器pandas 数据框中的列到组。一种方法是使用回调函数,如您所演示的:
def callback(x): x['seq'] = range(1, x.shape[0] + 1) return x
虽然此方法有效,但它可能很麻烦并且需要定义一个单独的函数。更简洁和优雅的解决方案是利用 cumcount() 方法:
df.groupby(['c1', 'c2']).cumcount()
此方法计算每个组的累积计数,有效地为组中的每一行分配一个序号。例如,考虑以下数据框:
index | c1 | c2 | v1 |
---|---|---|---|
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 |
将 cumcount() 应用于此数据框,按 c1 和 c2 分组,将生成:
index | 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 |
改为从 1 开始排序为 0,只需在 cumcount() 结果上加 1:
df.groupby(['c1', 'c2']).cumcount() + 1
以上是如何有效地向 Pandas 中的分组数据添加顺序计数器列?的详细内容。更多信息请关注PHP中文网其他相关文章!