2017-10-18 8 views
0

私は以下のように、パンダのデータフレームDFで作業しています。 DFのすべての要素は正の整数または0です。pandasデータフレームの行を削除する:特定の条件が満たされるたびに以前のk行を削除します

kが2以上であるように、列 'c'にi番目の行のkと等しい値が含まれている場合は、行iを削除します。行(i-1)、...、行(i-(k-1))となる(k行合計が削除される)。 I カラム 'c'の値が2以上の場合、行が削除される必要があります。

この例では、これは問題の「k」が3になり、 5行目(5行目、4行目、3行目を削除します。合計3行、 '3'の値を含む行を含めて)。

注意:列 'c'のj番目の行がkに等しい場合、直前のk-1行は0になります。つまり、行jが削除されると、削除された他の行はすべて列c 。

誰でもこれを行う方法のアイデアはありますか?必要な結果を有する例示的なデータフレームの画像について

https://i.imgur.com/2QpC7JF.pngを参照してください。

enter image description here

データフレーム:

A = matrix([[9, 9, 0, 9, 9], 
    [1, 2, 1, 9, 9], 
    [8, 8, 0, 2, 3], 
    [7, 7, 0, 7, 8], 
    [1, 2, 0, 3, 4], 
    [6, 6, 3, 6, 6], 
    [1, 2, 0, 1, 2]]) 
DF = pd.DataFrame(A) 
DF.columns = ['a', 'b', 'c', 'd', 'e'] 

答えて

1

this docs pageによれば、あなたは範囲をドロップすることができの行数はdf.drop(df.index[[2,3]])です。

df.drop(df.index[list(range(i-3, i))]) 
iが、私はこれをテストしていませんが、あなたはドロップすることができるかもしれない5です

:あなたの例のように、あなたはその行5がドロップをトリガ見つけ、のであれば、あなたがこれを行うことができますlistにキャストします。

+0

ありがとうございました。これは機能しました(ちょうどrange関数の両方の引数に1を加えなければなりません)。 –

関連する問題