我需要查看列['b']中的所有行,如果該行不是空的,請轉到另一個相應的列['c']並刪除此特定的重複項索引針對第三列['c']中的所有其他行,同時保留此特定索引。我遇到了drop_duplicates,但是我無法找到一種方法來查找突出顯示的行的重複項,而不是列中的所有重複項。我不能在整個列上使用drop_duplicates,因爲我想在此列中保留可能對應於列['b']中的空值的重複項。如果在['b']中找到非空值,則可以轉到['c']中的當前索引並找到該索引的所有重複項並將其刪除。這些重複項可以對應['b']中的空或非空值。如果在['b']中找到空值,則跳至下一個索引。通過這種方式,可能會間接移除['b']中的空值索引,因爲它們是['c']中與非空[[b']值對應的索引的重複項。python pandas如何有選擇地刪除重複項
編輯樣本數據:
預處理的:
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,因爲它們在行1的列['C']中具有非零「B」值的副本。儘管第5,6行在列['C']中彼此重複,因爲它們沒有非零的'B'值。行2和行4保留,因爲它們不是列['C']中的重複項。
所以邏輯將是通過'B'列中的每一行,如果它是空的,然後向下移動並繼續。如果它不是空的,則轉到相應的列'C'並刪除該列'C'行的所有副本,同時保留該索引,然後繼續到下一行,直到此邏輯已應用於'B'列中的所有值」。
B列值爲空 - >看看列B中的下一個值
|或者如果不是空的|
B列不爲空 - > C欄 - >刪除C列的該索引的所有副本,同時保持當前索引 - >查找在B列下一個值
能否請您提供一些數據樣本? (http://stackoverflow.com/help/mcve) – Thanos
And:[如何製作好重現熊貓的例子](http:// stackoverflow。問題/ 20109391 /如何製作好可重現的熊貓示例) – IanS
用數據示例編輯 – lucas305