我想向熊猫数据框添加新索引

发布于 2021-01-29 16:18:28

我正在尝试向熊猫数据框添加新索引。数据框如下所示:

                    date  price  neg_vol  pos_vol
0    2017-10-17 01:00:00  51.88       11        4
1    2017-10-17 01:00:00  51.89       10        2
2    2017-10-17 01:00:00  51.90       16       27
3    2017-10-17 01:00:00  51.91        1       10
4    2017-10-17 01:05:00  51.87       12        0
5    2017-10-17 01:05:00  51.88        0       12
6    2017-10-17 01:10:00  51.87        8        0
7    2017-10-17 01:10:00  51.88        0        5
8    2017-10-17 01:15:00  51.87       12        0
9    2017-10-17 01:15:00  51.88        0        8
10   2017-10-17 01:20:00  51.87        6        0

这是我想要得到的结果:

     index                   date  price  neg_vol  pos_vol
0        1    2017-10-17 01:00:00  51.88       11        4
1        1    2017-10-17 01:00:00  51.89       10        2
2        1    2017-10-17 01:00:00  51.90       16       27
3        1    2017-10-17 01:00:00  51.91        1       10
4        2    2017-10-17 01:05:00  51.87       12        0
5        2    2017-10-17 01:05:00  51.88        0       12
6        3    2017-10-17 01:10:00  51.87        8        0
7        3    2017-10-17 01:10:00  51.88        0        5
8        4    2017-10-17 01:15:00  51.87       12        0
9        4    2017-10-17 01:15:00  51.88        0        8
10       5    2017-10-17 01:20:00  51.87        6        0

如您所见,索引列是根据日期列设置的。如果行的日期相同,则它们共享相同的索引号。我认为可以通过一些条件循环来完成,但是我想知道是否有更简单的方法可以做到这一点。

关注者
0
被浏览
149
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    用途ngroup

    • 对于新列 index

      df[‘index’] = df.groupby(‘date’, sort=False).ngroup() + 1
      print (df)
      date price neg_vol pos_vol index
      0 2017-10-17 01:00:00 51.88 11 4 1
      1 2017-10-17 01:00:00 51.89 10 2 1
      2 2017-10-17 01:00:00 51.90 16 27 1
      3 2017-10-17 01:00:00 51.91 1 10 1
      4 2017-10-17 01:05:00 51.87 12 0 2
      5 2017-10-17 01:05:00 51.88 0 12 2
      6 2017-10-17 01:10:00 51.87 8 0 3
      7 2017-10-17 01:10:00 51.88 0 5 3
      8 2017-10-17 01:15:00 51.87 12 0 4
      9 2017-10-17 01:15:00 51.88 0 8 4
      10 2017-10-17 01:20:00 51.87 6 0 5


    • 用于新索引

      df.index = df.groupby(‘date’, sort=False).ngroup() + 1
      print (df)
      date price neg_vol pos_vol
      1 2017-10-17 01:00:00 51.88 11 4
      1 2017-10-17 01:00:00 51.89 10 2
      1 2017-10-17 01:00:00 51.90 16 27
      1 2017-10-17 01:00:00 51.91 1 10
      2 2017-10-17 01:05:00 51.87 12 0
      2 2017-10-17 01:05:00 51.88 0 12
      3 2017-10-17 01:10:00 51.87 8 0
      3 2017-10-17 01:10:00 51.88 0 5
      4 2017-10-17 01:15:00 51.87 12 0
      4 2017-10-17 01:15:00 51.88 0 8
      5 2017-10-17 01:20:00 51.87 6 0

    另一个解决方案是factorize

    df['index'] = pd.factorize(df['date'])[0] + 1
    

    df.index = pd.factorize(df['date'])[0] + 1
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看