python - 我想向 pandas 数据框添加新索引

标签 python pandas

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

                    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

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

最佳答案

使用ngroup :

  • 对于新列索引
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

关于python - 我想向 pandas 数据框添加新索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218673/

相关文章:

python-3.x - 不能用 pandas 删除 na 在 Python 中读取 excel 文件

python - k-hot 编码来自多列的值

python - 根据某些列中的空值删除行( Pandas )

Python 太多打开的文件、eventlet 和 multiprocessing.dummy

Mac OS 上的 Python ioctl 错误

python - 如何获取 Spark DataFrame 中每行列表中最高值的索引? [PySpark]

python - 将 Pandas 中的自定义对象转换为标准日期时间对象

python - 将 Django 中的 DateTimeField 转换为 Unix 时间

python - 根据列的值连续性按行拆分/分组 pandas DataFrame

python - 如何使用 Python/Pandas 衡量预测的准确性?