簡體   English   中英

根據 2 列中的條件值刪除行

[英]Dropping rows based on conditional values from 2 columns

我有一個 DataFrame 有 2 列:“名稱”和“零售類型”。 “name”表示位置的名稱,“retailtype”表示在該位置發生的一般零售類型。

我需要做的是:對於“retailtype”等於“settlement_with_key_retail_centre”的行,我想刪除“name”列不等於“Glasgow”、“Edinburgh”、“Aberdeen”、“Dundee”的所有行'、'因弗內斯'或'珀斯斯特林'

我寫的代碼是:

cities_to_consider = ['Glasgow', 'Edinburgh', 'Aberdeen', 'Dundee', 'Inverness', 'PerthStirling']

if shopping_centres['retailtype'] == 'settlement_with_key_retail_centre' :
    shopping_centres = shopping_centres.drop( shopping_centres.loc[ (shopping_centres['name'](cities_to_consider))])

但這似乎不起作用。

誰能告訴我解決這個問題的最佳方法是什么? 我想過迭代 DataFrame 中的行,但 Stack Overflow 中的一些答案表明這不是最佳的。

嘗試索引要刪除的行,然后反轉索引。

rows_you_want_to_drop = df.loc[
    (DROP_CONDITION_A) & (DROP_CONDITION_B)
]

這將為您提供 DataFrame 僅包含您要刪除的行。 現在您可以將給定條件從df.loc[CONDITION]反轉為df.loc[~CONDITION]

rows_you_want_to_save = df.loc[
    ~((DROP_CONDITION_A) & (DROP_CONDITION_B))
]

在您的情況下,兩個丟棄條件將是以下兩個的結合:

df.retailtype == 'settlement_with_key_retail_centre'
~df.name.isin(['Glasgow', 'Edinburgh', 'Aberdeen', 'Dundee', 'Inverness', 'PerthStirling'])

是的,遍歷行通常是一個壞主意,因為它相對較慢; 嘗試閱讀 DataFrame.loc 上的 pandas 文檔和索引,它會對您有很大幫助:)

index_names = df[ (df['retailtype'] == 'settlement_with_key_retail_centre') & (~df.name.isin(['格拉斯哥','愛丁堡','阿伯丁','鄧迪','因弗內斯','珀斯斯特林' ]))]。指數

df.drop(index_names, inplace = True)

以上幾行應該給你想要的 output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM