首页 > 解决方案 > 根据一行的值删除熊猫中数据框的特定行

问题描述

我有一个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

每一行都是一个人的一次旅行。而每一个独特的组合,HOUSEID都是PERSONID一个人。如果在这些列的一个行程中甚至有一个“-9”,我想完全删除一个人ENDTIMESTRTTIME并且TRVLCMIN

这是我的数据框通过这种解释的输出:

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

你能帮我解决这个问题吗?

我非常感谢您的时间。

标签: python-3.xpandas

解决方案


您可以-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

推荐阅读