删除满足条件的一半数据帧行

时间:2018-01-19 18:18:06

标签: python pandas dataframe

我希望根据条件提取数据帧的子集。让我们说

 df = pd.Dataframe({'Col1': [values1], 'Col2' = [values2], 'Col3' = [values3]})

我想按Col2排序。 Col2中的条目是否定的(如果有的话),我想减少最大的一半。因此,如果values2 = [-5,10,13,-3,-1,-2],那么我想要删除对应于值-5和-3的行。

如果我想在排序后简单地删除整个数据帧的一半,我(想)可以做到

df = df.iloc[(df.shape[0]/2):]

不确定如何引入仅减去负值一半的条件。我的绝大部分经验都是笨拙的 - 仍然习惯于在数据框架方面进行思考。提前谢谢。

2 个答案:

答案 0 :(得分:3)

数据输入

$Q="SELECT DISTINCT `pro_cost` FROM `products` WHERE `pro_cost` < 900"; 
$result=$this->db->query($Q)->result();

使用put-metric-datavalues1 = [-5,10,13,-3,-1,-2] values2 = [-5,10,13,-3,-1,-2] values3 = [-5,10,13,-3,-1,-2] df = pd.DataFrame({'Col1': values1, 'Col2' : values2, 'Col3' : values3}) ,你可以从样本(n)中计算出n,我只是在这里使用2

sample

答案 1 :(得分:2)

直接的方法,首先,您希望对数据框进行排序:

In [16]:  df = pd.DataFrame({'Col1': values1, 'Col2':values2, 'Col3': values3})
In [17]: df
Out[17]:
   Col1  Col2 Col3
0     1    -5    a
1     2    10    b
2     3    13    c
3     4    -3    d
4     5    -1    e
5     6    -2    f

In [18]: df.sort_values('Col2', inplace=True)

In [19]: df
Out[19]:
   Col1  Col2 Col3
0     1    -5    a
3     4    -3    d
5     6    -2    f
4     5    -1    e
1     2    10    b
2     3    13    c

然后,为负值创建一个布尔掩码,使用np.where获取索引,将索引切成一半,然后删除这些索引:

In [20]: mask = (df.Col2 < 0)

In [21]: idx, = np.where(mask)

In [22]: df.drop(df.index[idx[:len(idx)//2]])
Out[22]:
   Col1  Col2 Col3
5     6    -2    f
4     5    -1    e
1     2    10    b
2     3    13    c