如何从pandas数据框中删除具有特定属性值的行的分数

时间:2016-12-15 18:28:21

标签: python pandas

拥有一个pandas数据框,如何有效地删除具有特定值的一小部分行,比如" low "在属性 class ? 这是我的代码:

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

从所有类中删除,我希望它只从class = Low 中删除。

2 个答案:

答案 0 :(得分:3)

向下筛选您要删除的行,使用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 :(得分:1)

稍微不同的方式是使用布尔切片,保留所有非低行,然后通过0-1随机数保留低行的一小部分。

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