串联后Pandas重新计算索引

时间:2016-02-20 19:41:46

标签: python pandas

我有一个问题,我通过沿行轴连接(垂直堆叠)生成一个pandas数据帧。

每个组成数据帧都有一个自动生成的索引(升序数字)。

连接后,我的索引被搞砸了:它计数到n(其中n是相应数据帧的形状[0]),并在下一个数据帧重新开始。

我正在尝试“重新计算索引,给定当前订单”或“重新索引”(或者我认为)。事实证明,这并不是DataFrame.reindex似乎正在做的事情。

这是我尝试做的事情:

train_df = pd.concat(train_class_df_list)
train_df = train_df.reindex(index=[i for i in range(train_df.shape[0])])

失败了“无法从重复的轴重新索引”。我不想改变我的数据的顺序...只需删除旧索引并设置一个新索引,保留行的顺序。

3 个答案:

答案 0 :(得分:33)

如果您的索引是自动生成的,并且您不想保留它,则可以使用ignore_index选项。 `

train_df = pd.concat(train_class_df_list, ignore_index=True)

这将为您自动生成一个新索引,我的猜测是这正是您所追求的。

答案 1 :(得分:27)

垂直连接后,如果你得到 [0,n)的索引,然后是 [0,m),你需要做的就是调用{{3 }}:

train_df.reset_index(drop=True)

(您可以使用inplace=True)来完成此操作。

import pandas as pd

>>> pd.concat([
    pd.DataFrame({'a': [1, 2]}), 
    pd.DataFrame({'a': [1, 2]})]).reset_index(drop=True)
    a
0   1
1   2
2   1
3   2

答案 2 :(得分:4)

这应该有效:

train_df.reset_index(inplace=True, drop=True) 

drop设置为True以避免数据框中的其他列。