我很难进行复杂的数据帧过滤。
问题在于:
对于具有相同值的每个列'id',列'job'可以取值'fireman','nan','policeman'。
我想过滤我的数据框,以便为每个具有相同值的ID
我只保留从上次连续出现作业值'fireman'开始的行。我首先必须按“作业”值进行分组才能过滤:
df.groupby("job").filter(lambda x: f(x))
我不知道哪个函数f是合适的。
有什么想法吗?
尝试:
df = pd.DataFrame([[79,1,], [79,2,'fireman'],[79,3,'fireman'],[79,4,],[79,5,],[79,6,'fireman'],[79,7,'fireman'],[79,8,'policeman']], columns=['id','day','job'])
output = pd.DataFrame([[79,6,'fireman'],[79,7,'fireman'],[79,8,'policeman']], columns=['id','day','job'])
答案 0 :(得分:0)
这是一个不需要额外变量的版本:
df.groupby('imo').apply(lambda grp: grp[grp.index >=
((grp.polygon.shift() != grp.polygon) &
(grp.polygon.shift(-1) == grp.polygon) &
(grp.polygon == 'FE')
).cumsum().idxmax()]
).reset_index(level=0, drop=True)