将递增的数字添加到数据帧的某些coulmn

2024-09-25 08:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个df,如下所示

df = pd.DataFrame({'val': [30, 40, 50, 60, 70, 80, 90], 'idx': [9, 8, 7, 6, 5, 4, 3],
                     'category': ['a', 'a', 'b', 'b', 'c', 'c', 'c']}).set_index('idx')

Ouput:

      val category
idx              
9     30        a
8     40        a
7     50        b
6     60        b
5     70        c
4     80        c
3     90        c

我想为每个“类别”的行添加一个从1递增到总数的数字。新列应如下所示:

     category  incrNbr  val
idx                       
3          a      1     30
4          a      2     40
5          b      1     50
6          b      2     60
7          c      1     70
8          c      2     80
9          c      3     90

目前,我循环浏览每个类别,如下所示:


li = []
for index, row in df.iterrows():
    cat = row['category']
    if cat not in li:
        li.append(cat)
        temp = df.loc[(df['category'] == row['category'])][['val']]
        temp.insert(0, 'incrNbr', range(1, 1 + len(temp)))
        del temp['val']
        df = df.combine_first(temp)

它非常慢

有没有一种方法可以使用矢量化操作来实现这一点


Tags: indataframedfindexvalli类别temp
1条回答
网友
1楼 · 发布于 2024-09-25 08:38:59

如果您的category列已排序,我们可以使用GroupBy.cumcount

df['incrNbr'] = df.groupby('category')['category'].cumcount().add(1)

     val category  incrNbr
idx                       
9     30        a        1
8     40        a        2
7     50        b        1
6     60        b        2
5     70        c        1
4     80        c        2
3     90        c        3

相关问题 更多 >