当前位置: 首页 > 面试题库 >

Python-如何使用Pandas groupby在组上添加顺序计数器列

师腾
2023-03-14
问题内容

我觉得有比这更好的方法:

import pandas as pd
df = pd.DataFrame(
    [['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],
     ['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],
     ['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],
    columns=['c1', 'c2', 'v1'])
def callback(x):
    x['seq'] = range(1, x.shape[0] + 1)
    return x
df = df.groupby(['c1', 'c2']).apply(callback)
print df

为达到这个:

   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(),请参阅此处的文档

In [4]: df.groupby(['c1', 'c2']).cumcount()
Out[4]: 
0     0
1     1
2     0
3     1
4     0
5     1
6     2
7     0
8     0
9     0
10    1
11    2
dtype: int64

如果要从1开始订购

In [5]: df.groupby(['c1', 'c2']).cumcount()+1
Out[5]: 
0     1
1     2
2     1
3     2
4     1
5     2
6     3
7     1
8     1
9     1
10    2
11    3
dtype: int64


 类似资料:
  • 我正在尝试将计数器列(和)添加到数据帧中,但使用等没有成功。下面是输入数据帧()和所需输出数据帧()以及几个错误输出的代码的代表。 通过排列两个变量来添加计数器列(dplyr) https://community.rstudio.com/t/how-to-add-a-counter-to-each-group-in-dplyr/12986/2 https://dplyr.tidyverse.org

  • 问题内容: 假设我有一个NumPy数组a: 我想添加一列零以获取一个数组b: 我如何在NumPy中轻松地做到这一点? 问题答案: 我认为,更简单,更快速的启动方法是执行以下操作: 和时间:

  • 问题内容: 我需要能够增加和减少对象中数组元素的位置。 我在MongoDB API中 查看了该API,但找不到任何让我这样做的东西。 我正在尝试使用贯通,并且我知道要向上或向下移动的元素的索引。 编码图像数组项的示例: 我想向上或向下移动“ img2”(但由于无处可去,因此“图像”应该不能向上推)。 如果我想向上推“ img2”,那么结果将是: 通过更改索引,交换或上推/下推来实现此目标都没有关系

  • 那么我该如何安装这些库来尝试新的项目呢?谢谢!

  • 问题内容: 我有一个数组 如您所见,键0与1、3和4相同。键2与它们全部不同。 在它们上运行array_unique函数时,唯一剩下的是 有什么想法为什么array_unique无法按预期工作? 问题答案: 这是因为使用字符串比较来比较项目。从文档: 注意:当且仅当(string)$ elem1 ===(string)$ elem2,两个元素才被视为相等。换句话说:当字符串表示相同时。将使用第一个

  • 我的样本json如下所示 基本上,我想在Passenger数组后面添加“paxend”:“true”。我们如何使用Jolt实现这一点?非常感谢任何帮助。我很抱歉没有发布我的颠簸规格,因为它不起作用。