根据条件保留大熊猫数据框的前n行

时间:2018-10-27 15:39:51

标签: python pandas dataframe

在满足特定条件后,如何删除数据框中的所有行?例如,我有以下数据框:

import pandas as  pd
xEnd=1
yEnd=2
df = pd.DataFrame({'x':[1,1,1,2,2,2], 'y':[1,2,3,3,4,3], 'id':[0,1,2,3,4,5]})

我将如何获得一个数据帧,该数据帧将删除最后4行,并保持高2位(与第2行相同),满足条件x=xEndy=yEnd。 编辑:应该提到数据框不一定是升序的。也可以下降,我仍然想获得较高的。

3 个答案:

答案 0 :(得分:2)

要在第一次满足2个系列的条件之前对数据帧进行切片,直到 ,首先计算所需的索引,然后通过iloc进行切片。

您可以通过set_indexisinnp.ndarray.argmax计算索引:

idx = df.set_index(['x', 'y']).isin((xEnd, yEnd)).values.argmax()
res = df.iloc[:idx+1]

print(res)

   x  y  id
0  1  1   0
1  1  2   1

如果您需要更好的性能,请参见Efficiently return the index of the first value satisfying condition in array

答案 1 :(得分:1)

不是100%肯定我理解正确,但是您可以像这样过滤数据框:

import java.util.HashSet;
import java.util.Set;


public class SetTest {

    public static void main(String[] args) {
        Set<String> placeSet=new HashSet<String> ();

        String s1="traffic";
        String s2="mumbai";
        String s3="Mumbai";
        String s4="roadcollapse";

        placeSet.add(s1.toLowerCase());
        placeSet.add(s2.toLowerCase());
        placeSet.add(s3.toLowerCase());
        placeSet.add(s4.toLowerCase());

        for (String place:placeSet)
        {
            if (!place.contains("traffic") || !place.contains("collapse"))
            {
                System.out.println (place);
            }
        }

    }

}

这将产生数据框:

 df[(df.x <= xEnd) & (df.y <= yEnd)]

如果x和y没有严格增加,并且您希望满足条件的行上方的内容是

   id   x   y   
0   0   1   1   
1   1   1   2 

答案 2 :(得分:0)

+

仅选择前两行,并保留所有列并将其放在新的数据框中。 或者,您也可以使用相同名称的变量。