15

私はパンダシリーズを持っていて、乱数に基づいて行(以下のコード例では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
4

4 に答える 4

14

やや紛らわしいことに、reindex「新しいインデックスを作成する」という意味ではありません。新しいインデックスを作成するには、index属性に割り当てるだけです。したがって、最後のステップで実行しますsample_mean_series.index = range(len(sample_mean_series))

于 2013-01-23T19:17:24.333 に答える
14

これがワンライナーです:

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
于 2013-01-23T19:24:09.740 に答える
0

データフレームに行をドロップしてインデックスをクリーンアップするには:

b = df['amount'] > 10000
df_dropped = df.drop(df[~b].index).reset_index()
于 2021-05-23T16:58:45.433 に答える
0
df.reset_index(drop=True, inplace = True)

あなたが望むことを正確に行います。

インデックスをリセットすると、古いインデックスが列として追加され、新しいシーケンシャルインデックスが使用されます。ドロップパラメータを使用して、古いインデックスが列として追加されないようにすることができます。

于 2021-11-25T10:55:53.073 に答える