私はそのようにインデックスをリセットできることを知っています
df.reset_index(inplace=True)
しかし、これは0
からインデックスを開始します。 1
から開始したい。追加の列を作成せずに、index/reset_indexの機能とオプションを保持することで、これを行うにはどうすればよいですか?私はnot新しいデータフレームを作成したいので、inplace=True
はまだ適用されるはずです。
新しいインデックス配列を直接割り当てるだけです:
df.index = np.arange(1, len(df) + 1)
例:
In [151]:
df = pd.DataFrame({'a':np.random.randn(5)})
df
Out[151]:
a
0 0.443638
1 0.037882
2 -0.210275
3 -0.344092
4 0.997045
In [152]:
df.index = np.arange(1,len(df)+1)
df
Out[152]:
a
1 0.443638
2 0.037882
3 -0.210275
4 -0.344092
5 0.997045
あるいは単に:
df.index = df.index + 1
インデックスがすでに0ベースの場合
[〜#〜] timings [〜#〜]
何らかの理由でreset_index
のタイミングを取ることができませんが、以下は100,000行dfのタイミングです:
In [160]:
%timeit df.index = df.index + 1
The slowest run took 6.45 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 107 µs per loop
In [161]:
%timeit df.index = np.arange(1, len(df) + 1)
10000 loops, best of 3: 154 µs per loop
したがって、reset_index
のタイミングがないと断言することはできませんが、インデックスが既に0
ベースである場合、各インデックス値に1を追加するだけで速くなるようです
以下のようなインデックス範囲を使用して開始値を指定することもできます。 RangeIndexはパンダでサポートされています。
#df.index
デフォルト値が印刷されます(start = 0、stop = lastelement、step = 1)
次のような開始値の範囲を指定できます。
df.index = pd.RangeIndex(start=1, stop=600, step=1)