2017-09-19 63 views
-1

我有任何空值刪除所有行沒問題,但我只希望某些行下跌與空值以防止他人與NaN的跌落行基於其他列的值

例如:

index city  lo  hi 
0 Chicago nan  75 
1 Boston  nan  nan 
2 New York 54  89 
3 Miami  nan  nan 
4 Seattle 49  nan 

請記住,我已經不僅僅是5.因此,更多的行,df.dropna(axis=0, how='any')只會讓我2 New York 54 89

但如果我只是想芝加哥和邁阿密下降了嗎?我如何在「城市」列上設置該條件?因此,我將結束:

index city  lo  hi 
1 Boston  nan  nan 
2 New York 54  89 
4 Seattle 49  nan 
+1

這沒有任何意義。波士頓也有'南',你爲什麼不放棄它?你真的想要指定一個城市列表退出?或者你只想使用'lo'或者只是'hi'? –

+1

「西雅圖」的值也從輸入變爲輸出。 –

+0

夥計,這只是一個例子。我想刪除具有任何空值的特定行,因爲我不需要填充這些值。我只想留下稍後填寫的空白。只是清除我知道我不需要的行。 所以是的,我想刪除任何有空的行,由另一列中的條件指定。所以在這個例子中,我不希望刪除null的所有行。我也不希望所有'芝加哥'或'邁阿密'丟掉,沒有空。 因此按城市價值下降將與城市一起下降(不要這樣) 用空值刪除行將會刪除所有這些行(不要那樣) – chitown88

回答

2

使用isin找到所有行鍼對特定城市,然後使用isnull沿着第一軸,並從在這些空行的原始數據幀丟棄所有行。

cities = ['Miami', 'Boston'] 
idx = df[df.city.isin(['Boston', 'Miami'])].isnull().any(1).index  
df = df.loc[df.index.difference(idx)] 

print(df) 
    index  city lo hi 
0  0 Chicago NaN 75.0 
2  2 New York 54.0 89.0 
4  4 Seattle 49.0 NaN 

index.difference將返回所有指數值df.index不在idx

+0

但是會刪除所有'邁阿密'行,其中我不想要。我如何使這種狀況?所以刪除指定城市的行和該行中的任何null ......僅用於'邁阿密'行dropna?因此,保留任何沒有空值的'邁阿密'行 – chitown88

+0

@ chitown88終於得到你想要的。看我的編輯。下一次,請使用能夠更好地表達您想要的內容的示例。 –