2016-12-15 49 views
1

擁有一個pandas數據框,如何有效地刪除屬性爲的具有特定值的「低位」行的一部分類? 這裏是我的代碼:如何從pandas數據框中刪除具有特定屬性值的行的部分

import pandas as pd 
import numpy as np 
np.random.seed(3) 
df = pd.DataFrame({"a":[1,2,3,4], "b":[5,6,7,8], "class":['High','Low','Low','Low']}) 
drop_indices = np.random.choice(df.index, int(np.ceil(0.5*df.shape[0])) , replace=True) 
df_subset = df.drop(drop_indices) 
print df 
print df_subset 

輸出:

a b class 
0 1 5 High 
1 2 6 Low 
2 3 7 Low 
3 4 8 Low 
    a b class 
1 2 6 Low 
3 4 8 Low 

這從所有類中刪除,我希望它從類中刪除= 只。

+1

請問1.您發佈樣本數據2.期望的輸出3.您到目前爲止已經嘗試了什麼4.請輸入密碼? – Zero

回答

2

篩選下來只是你要從中進行刪除,使用sample選擇成員的部分去除,然後用drop刪除這些行:

df = df.drop(df[df['class'] == 'Low'].sample(frac=0.33).index) 

輸出結果:

a b class 
0 1 5 High 
2 3 7 Low 
3 4 8 Low 
1

稍微不同的方式看它會使用布爾切片,保留所有非低行,然後通過0-1隨機數只保留一小部分低行。

df[(df['class'] != 'Low') | (np.random.rand(len(df)) < .33)] 
相關問題