列['b']内のすべての行を調べ、行が空でない場合は、対応する別の列['c']に移動し、この特定のインデックスを保持しながら、その第3列['c']の他のすべての行に対してインデックスを作成します。私はdrop_duplicatesに遭遇しましたが、列内のすべての重複とは対照的に、強調表示された行の重複を探す方法を見つけることができませんでした。列全体のdrop_duplicatesを使用することはできません。なぜなら、列['b']の空の値だけに対応するこの列に重複を保持したいからです。python pandas重複を選択的に削除する方法
['b']で空の値が見つからない場合、['c']の現在のインデックスに行き、その1つのインデックスのすべての重複を見つけて削除することができます。これらの重複は、['b']の空のOR空でない値に対応する可能性があります。 ['b']で空の値が見つかった場合は、次のインデックスにスキップしてください。このように、['b']の空の値インデックスは、空でない['b']値に対応する['c']のインデックスの重複であるため、間接的に削除される可能性があります。
サンプルデータで編集:
は、前処理:
df1 = pd.DataFrame([['','CCCH'], ['CHC','CCCH'], ['CCHCC','CNHCC'], ['','CCCH'], ['CNHCC','CNOCH'], ['','NCH'], ['','NCH']], columns=['B', 'C'])
df1
B C
0 CCCH
1 CHC CCCH
2 CCHCC CNHCC
3 CCCH
4 CNHCC CNOCH
5 NCH
6 NCH
ポストプロセッシングと正しい重複を落とす:
df2 = pd.DataFrame([['CHC','CCCH'], ['CCHCC','CNHCC'], ['CNHCC','CNOCH'], ['','NCH'], ['','NCH']], columns=['B', 'C'])
df2
B C
1 CHC CCCH
2 CCHCC CNHCC
4 CNHCC CNOCH
5 NCH
6 NCH
私たちの上には、削除された行のみが行0だったという結果を参照してください、 3であり、これは、非ゼロの「B」値を有する行1の列「 'C'」において重複しているからである。行5,6は、カラム '[C']にお互いが重複していても保持されます。なぜなら、それらはゼロ以外の 'B'値を持たないからです。行2と列4は列['C']に重複していないため、保持されます。
したがって、ロジックが空の場合は列 'B'の各行を通過し、行を下に移動して続行することになります。空でない場合は、対応する列 'C'に行き、その列 'C'行の重複をそのインデックスを保持したままでドロップし、この論理が列 'Bのすべての値に適用されるまで'
カラムB値空 - >カラムBの次の値を参照
|または空でない場合|
列Bない空 - >コラムC - >現在のインデックスを維持しながら、列Cのそのインデックスのすべての重複をドロップします - >列B内の次の値を見
あなたは、いくつかのデータサンプルを提供していただけますか? (http://stackoverflow.com/help/mcve) – Thanos
そして:[良い再現可能なパンダの例を作る方法](http:// stackoverflow。com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – IanS
データ例で編集 – lucas305