根据一行的值删除熊猫中某个数据框的特定行

时间:2020-06-04 13:49:33

标签: python-3.x pandas

我有一个数据框df,其中包含约100万行:

    HOUSEID  PERSONID   ENDTIME STRTTIME    TRVLCMIN        
0   20000017    1        1020      955         25   
1   20000017    1        1132      1130        2    
2   20000017    1        1400      1330        30   
3   20000017    2        1020      955         25   
4   20000017    2        1025      1022        3    
5   20000017    2        -9        1120        2
6   20000017    2        2035      2000        35
7   20000231    1        952       945         7
8   20000231    1        1000      -9          5
9   20000231    2        2013      2002       -9

每一行都是一个人的旅程。 HOUSEIDPERSONID的每个唯一组合都是一个人。 如果这些列ENDTIMESTRTTIMETRVLCMIN的行程中甚至有一个“ -9”,我想完全删除一个人。

以下是我的数据帧的输出:

        HOUSEID PERSONID    ENDTIME    STRTTIME       TRVLCMIN      
    0   20000017    1        1020        955              25    
    1   20000017    1        1132        1130             2 
    2   20000017    1        1400        1330             30    

您能帮我吗?

非常感谢您的光临。

1 个答案:

答案 0 :(得分:1)

您可以在任何这些列中检查-9,然后检查groupby().transform以标识具有一些HOUSEID, PERSONID的组合-9

# rows having -9 in one of the specified columns
s = df[['ENDTIME','STRTTIME','TRVLCMIN']].eq(-9).any(1)

# combination of `HOUSEID`, `PERSONID` having some `-9`
mask = s.groupby([df['HOUSEID'],df['PERSONID']]).transform('any')

# output
df[~mask]

输出:

    HOUSEID  PERSONID  ENDTIME  STRTTIME  TRVLCMIN
0  20000017         1     1020       955        25
1  20000017         1     1132      1130         2
2  20000017         1     1400      1330        30