用行号填写一个新的pandas列

mic*_*196 12 python pandas

我有以下DataFrame data随机索引值:

      A   B
100   0   7
203   5   4
5992  0  10
2003  9   8
20   10   5
12    6   2
Run Code Online (Sandbox Code Playgroud)

我想添加一个带有行号的新列'C'.例如:

      A   B   C
100   0   7   0
203   5   4   1
5992  0  10   2
2003  9   8   3
20   10   5   4
12    6   2   5
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

WeN*_*Ben 21

通过使用 reset_index

df['C'] = df.reset_index().index
df

       A   B  C
100    0   7  0
203    5   4  1
5992   0  10  2
2003   9   8  3
20    10   5  4
12     6   2  5
Run Code Online (Sandbox Code Playgroud)

概括:

df['C'] = df.index if df.index.is_monotonic_increasing else range(len(df))
df

       A   B  C
100    0   7  0
203    5   4  1
5992   0  10  2
2003   9   8  3
20    10   5  4
12     6   2  5
Run Code Online (Sandbox Code Playgroud)

  • 那很聪明。如果有人想知道该命令的工作方式,它将创建一个具有常规/默认索引(默认情况下仅对行编号)的临时数据帧,从中获取索引,丢弃其余的临时数据帧,然后将其分配给原始数据框,作为常规列。 (2认同)

jez*_*ael 14

numpy.arange按长度使用DataFrame

df['C'] = np.arange(len(df))
print (df)
       A   B  C
100    0   7  0
203    5   4  1
5992   0  10  2
2003   9   8  3
20    10   5  4
12     6   2  5
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是“范围”? (2认同)

kam*_*sar 9

我们可以添加行号作为第一列的新列,如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame({'B': [1, 2, 3], 'C': [4, 5, 6]})

    B   C
0   1   4
1   2   5
2   3   6

df.insert(loc=0, column='A', value=np.arange(len(df)))
    A   B   C
0   0   1   4
1   1   2   5
2   2   3   6
Run Code Online (Sandbox Code Playgroud)


Ben*_*ert 5

没有 numpy 的短选项

df['C'] = range(len(df))
Run Code Online (Sandbox Code Playgroud)

如果您希望将行号分组

df['C'] = df.groupby('A').cumcount()
Run Code Online (Sandbox Code Playgroud)