我有一個元組串列如下:
ls = [("red", "apple"), ("black", "grapes"),
("green", "apple"), ("yellow", "banana"),
("white", "litchi"), ("brown", "grapes")]
如果你注意到,我有紅色和綠色的“蘋果”以及黑色和棕色的“葡萄”。所以我想洗掉任何一個元組并保留另一個元組,輸出應如下所示:
output = [("red", "apple"), ("black", "grapes"),
("yellow", "banana"), ("white", "litchi")]
所以在輸出(青蘋果)和(棕色葡萄)被洗掉。
有什么辦法可以做到這一點?我嘗試了很多次,但無法弄清楚。請幫忙.. :)
uj5u.com熱心網友回復:
如果需要按元組的第二個值洗掉重復項,請使用DataFrame.drop_duplicates:
a = pd.DataFrame(ls).drop_duplicates([1]).apply(tuple, 1).tolist()
print (a)
[('red', 'apple'), ('black', 'grapes'), ('yellow', 'banana'), ('white', 'litchi')]
uj5u.com熱心網友回復:
我設法將串列轉換為 Pandas DataFrame,根據“fruit”屬性洗掉重復項,然后將其轉換回元組串列。
import pandas as pd
ls = [("red", "apple"), ("black", "grapes"),
("green", "apple"), ("yellow", "banana"),
("white", "litchi"), ("brown", "grapes")]
df = pd.DataFrame (ls, columns=["color", "fruit"])
df.drop_duplicates (subset=["fruit"], keep="first", inplace=True)
print (list(df.to_records(index=False)))
uj5u.com熱心網友回復:
pandas 對此太過分了。它可以在不匯入任何額外模塊的情況下完成。
創建一個中間字典,然后從中重建元組串列:
ls = [("red", "apple"), ("black", "grapes"),
("green", "apple"), ("yellow", "banana"),
("white", "litchi"), ("brown", "grapes")]
d = [(v, k) for k, v in {v:k for k, v in ls}.items()]
print(d)
輸出:
[('green', 'apple'), ('brown', 'grapes'), ('yellow', 'banana'), ('white', 'litchi')]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/441213.html
標籤:Python python-3.x 熊猫 列表 元组
