如何返回涉及Pandas中两列的特定条件的行?

时间:2018-03-29 17:37:07

标签: python pandas pandas-groupby

我有这个数据框:

user_id     status_id       date_created
1           1               2018-02-14 11:49:07.429000-02:00
1           4               2018-02-19 12:51:43.622000-03:00
1           3               2018-02-15 09:21:23.116000-02:00
2           3               2018-02-19 12:52:08.646000-03:00
3           3               2016-08-29 11:02:39.449000-03:00
4           4               2016-08-29 11:18:31.742000-03:00
4           2               2018-02-21 10:43:45.747000-03:00
5           3               2018-02-15 09:34:57.478000-02:00
5           2               2018-02-19 11:52:16.629000-03:00

我想仅返回具有特定status_id且仅具有此特定状态的用户,例如,对于status_id=3,它应返回此信息:

user_id     status_id       date_created
2           3               2018-02-19 12:52:08.646000-03:00
3           3               2016-08-29 11:02:39.449000-03:00

我尝试过滤所有具有我需要的status_id的用户,但它也会返回具有多个status_id的用户:

> df.loc[df.user_id.isin(df.user_id.loc[df.status_id == 3])]
user_id     status_id       date_created
1           1               2018-02-14 11:49:07.429000-02:00
1           4               2018-02-19 12:51:43.622000-03:00
1           3               2018-02-15 09:21:23.116000-02:00
2           3               2018-02-19 12:52:08.646000-03:00
3           3               2016-08-29 11:02:39.449000-03:00
5           3               2018-02-15 09:34:57.478000-02:00
5           2               2018-02-19 11:52:16.629000-03:00

2 个答案:

答案 0 :(得分:3)

使用transform + i = 1 substitute(tau[CODE],list(CODE=i)) #tau[1]

nunique

更多信息

df[df.groupby('user_id').status_id.transform('nunique').eq(1)].loc[lambda x :x['status_id']==3,:]

答案 1 :(得分:0)

您可以按照here

所述使用df.loc[df['status_id'] == 3]

Python File with relevant input

Example