我正在寻找基于条件提取数据帧的子集。比如说
df = pd.Dataframe({'Col1': [values1], 'Col2' = [values2], 'Col3' = [values3]})
我想按颜色分类。在Col2中有负数(如果有的话)的条目中,我想去掉最大的一半。所以如果values2=[-5,10,13,-3,-1,-2],那么我想删除与值-5和-3对应的行。
如果我只想在排序后删除整个数据帧的一半,我(认为)可以
df = df.iloc[(df.shape[0]/2):]
不知道如何引入只减少一半负值的条件。我的绝大多数经验都是在numpy中——仍然习惯于用数据帧来思考问题。提前谢谢。
最佳答案
一种直截了当的方法,首先,您希望对数据帧进行排序:
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