我有一个数据框分组在列PID
上。数据框包含另一列year
。我想找出所有存在year > 1990
和year < 1970
的单独记录的PID。
我尝试了以下方法,但是结果不是我期望的:
g = df.groupby('PID')
g.filter(lambda x: ( ((x['year'] < 1970) | (x['year'] > 1990)).all() )
但这包括仅满足两个条件之一的PID。我需要具有<1970年和1990年都有记录的PID。
以下是数据示例:
此数据帧在PID
上分组,以生成上面编写的分组对象g
。
答案 0 :(得分:0)
d1 = df.loc[df["year"] < 1970, "PID"].drop_duplicates()
output = d1[d1.isin(df.loc[df["year"] > 1990, "PID"])]
答案 1 :(得分:0)
g = df.groupby('PID')
g.filter(lambda x: ((x['year'] < 1970).any() & (x['year'] > 1990).any()))
x['year'] < 1970
将返回一个布尔序列,其中将检查该条件下组中的每个记录。我们希望至少出现year < 1970
,将由.any()
检查。对于条件year > 1990
同样。最后,我们希望这两个条件都成立,因此介于两者之间的&
。