Pandasシリーズがあり、乱数に基づいて行(以下のコード例では5)を選択し、その行を削除します。行が削除されたら、新しい行を作成します。残りの行のインデックス(0から8)。以下のコード:
print 'Original series: ', sample_mean_series
print 'Length of original series', len(sample_mean_series)
sample_mean_series = sample_mean_series.drop([5],axis=0)
print 'Series with item 5 dropped: ', sample_mean_series
print 'Length of modified series:', len(sample_mean_series)
print sample_mean_series.reindex(range(len(sample_mean_series)))
そしてこれは出力です:
Original series:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 -0.000051
6 0.000125
7 -0.000108
8 -0.000009
9 -0.000052
Length of original series 10
Series with item 5 dropped:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
6 0.000125
7 -0.000108
8 -0.000009
9 -0.000052
Length of modified series: 9
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 NaN
6 0.000125
7 -0.000108
8 -0.000009
私の問題は、行番号8が削除されることです。行「5NaN」を削除し、インデックス0〜8で-0.000052を維持したいと思います。これは私が望むものです。
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 0.000125
6 -0.000108
7 -0.000009
8 -0.000052
やや紛らわしいことに、reindex
は「新しいインデックスを作成する」という意味ではありません。新しいインデックスを作成するには、index
属性に割り当てるだけです。したがって、最後のステップでsample_mean_series.index = range(len(sample_mean_series))
を実行するだけです。
これがワンライナーです:
In [1]: s
Out[1]:
0 -0.942184
1 0.397485
2 -0.656745
3 1.415797
4 1.123858
5 -1.890870
6 0.401715
7 -0.193306
8 -1.018140
9 0.262998
Series.drop
メソッドを使用して行5を削除してから、reset_index
を使用してインデックスの番号を付け直して連続させます。 reset_index
を使用しない場合、インデックスは5なしで4から6にジャンプします。
デフォルトでは、reset_index
は元のインデックスをDataFrame
に移動し、シリーズ値と一緒に返します。 drop=True
を渡すと、これが発生しなくなります。
In [2]: s2 = s.drop([5]).reset_index(drop=True)
In [3]: s2
Out[3]:
0 -0.942184
1 0.397485
2 -0.656745
3 1.415797
4 1.123858
5 0.401715
6 -0.193306
7 -1.018140
8 0.262998
Name: 0