我有一个数据框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”,我想完全删除一个人。
以下是我的数据帧的输出:
HOUSEID PERSONID ENDTIME STRTTIME TRVLCMIN
0 20000017 1 1020 955 25
1 20000017 1 1132 1130 2
2 20000017 1 1400 1330 30
您能帮我吗?
非常感谢您的光临。
答案 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