Python 3.x 基于一行的值删除数据帧中的特定行
我有一个数据帧Python 3.x 基于一行的值删除数据帧中的特定行,python-3.x,pandas,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 200000
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
的每个独特组合都是一个人。
如果在这些列ENDTIME
、STRTTIME
和TRVLCMIN
中的任何一个行程中都有“-9”,我想完全删除一个人
以下是我的dataframe的输出:
HOUSEID PERSONID ENDTIME STRTTIME TRVLCMIN
0 20000017 1 1020 955 25
1 20000017 1 1132 1130 2
2 20000017 1 1400 1330 30
你能帮我吗
非常感谢您抽出时间。您可以在这些列中的任何一列中检查
-9
,然后groupby()。转换以识别包含一些-9
的组合HOUSEID,PERSONID
:
# 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