Pandas(python):如何将列添加到dataframe的索引?

Nav*_*eet 25 python indexing dataframe pandas

我在数据框中有30个行的索引具有以下形式:

Int64Index([171, 174,173, 172, 199..............
        ....175, 200])
Run Code Online (Sandbox Code Playgroud)

索引没有严格增加,因为数据框是sort()的输出.我想添加一个系列列:

[1, 2, 3, 4, 5......................., 30]
Run Code Online (Sandbox Code Playgroud)

我应该怎么做呢?

谢谢.

Cha*_*She 74

怎么样:

df['new_col'] = range(1, len(df) + 1)
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望索引为排名并将原始索引存储为列:

df = df.reset_index()
Run Code Online (Sandbox Code Playgroud)

  • 这个答案让我想到了我想要的地方,因为我已经有了一个我想要替换的索引.在这种情况下,您可以补充:`df = df.reset_index(drop = True)` (4认同)
  • 使用 `np.arange` 而不是原生 `range`,例如 `df['new_col'] = np.arange(1, df.shape[0] + 1)` 应该可以加快运行时间,尤其是在处理大型数据集时。 (2认同)

小智 60

我在试图做同样的事情时偶然发现了这个问题(我想).我是这样做的:

df['index_col'] = df.index
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要对新索引列进行排序.

  • 我相信,这个应该是公认的答案. (5认同)
  • 不,那将是未分类的。 (2认同)
  • 更动态的 `df[df.index.name] = df.index` (2认同)

nit*_*tin 12

这个怎么样,

from pandas import *

idx = Int64Index([171, 174, 173])
df = DataFrame(index = idx, data =([1,2,3]))
print df
Run Code Online (Sandbox Code Playgroud)

这是你想要的?


XiB*_*XiB 9

这样做的方法是这样的:

重置索引:

df.reset_index(drop=True, inplace=True)
Run Code Online (Sandbox Code Playgroud)

对索引进行排序:

df.sort_index(inplace=True)
Run Code Online (Sandbox Code Playgroud)

从列设置新索引:

df.set_index('column_name', inplace=True)
Run Code Online (Sandbox Code Playgroud)

从范围中设置新索引:

df.index = range(1, 31, 1) #a range starting at one ending at 30 with a stepsize of 1.
Run Code Online (Sandbox Code Playgroud)

根据列值对数据框进行排序:

df.sort_values(by='column_name', inplace=True)
Run Code Online (Sandbox Code Playgroud)

重新分配变量也有效:

df=df.reset_index(drop=True)
df=df.sort_index()
df=df.set_index('column_name')
df.index = range(1, 31, 1) #a range starting at one ending at 30 with a stepsize of 1.
df=df.sort_values(by='column_name')
Run Code Online (Sandbox Code Playgroud)