說,我有以下兩個串列:
list1 = ['A', 'A', 'B', 'B', 'C', 'D']
list2 = ['x', 'y', 'y', 'x', 'x', 'y']
我想根據list2中重復項的對應元素為'y'的條件消除list1中的所有重復項及其在list2中的對應元素。
預期結果:
list1 = ['A', 'B', 'C', 'D']
list2 = ['y', 'y', 'x', 'y']
最后的最終目標是根據回傳的索引繼續做事,例如上面的例子:
index = [1, 2, 4, 5]
我嘗試通過使用熊貓來解決這個問題
df = pd.DataFrame(zip(list1, list2), columns=["l1", "l2"])
df = df[(~(df.duplicated(['l1']))) | (df.duplicated(['l1']) & df.l2.eq('y'))]
但這并沒有給我正確的結果。請注意,我不能參考第一個或最后一個元素的洗掉,因為“x”和“y”不需要以相同的順序出現。
帶有熊貓的解決方案很好,但不是必需的,帶有串列理解的解決方案也可以...
uj5u.com熱心網友回復:
你可以使用:
# keep if: l1 is not duplicated OR l2 == "y"
df[~df['l1'].duplicated(keep=False) | df['l2'].eq('y')]
輸出:
l1 l2
1 A y
2 B y
4 C x
5 D y
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425639.html
上一篇:使用索引訪問串列時出現索引錯誤
