[英]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.