我有以下数据框:
client_id location_id region_name location_name
1 123 Florida location_ABC
6 123 Florida(P) location_ABC
6 845 Miami(P) location_THE
1 386 Boston location_WOP
6 386 Boston(P) location_WOP
我想做的是:
- 如果某个 location_id 有多个 client_id,我会选择 client_id == 1。
- 如果某个 location_id 只有一个 client_id,我会选择它所在的任何一行。
如果我们只实现一种逻辑,它应该像 df[df['client_id'] == 1] 一样简单
。但是我不知道如何执行这种需要同时验证更多行的过滤(例如,弄清楚如何检查某个 location_id 是否有多个 client_id)。
因此,在这种情况下,生成的数据框将是:
client_id location_id region_name location_name
1 123 Florida location_ABC
6 845 Miami(P) location_THE
1 386 Boston location_WOP
有什么想法吗?
最佳答案
您可以使用 idxmax
在 bool 系列上使用自定义 groupby 等于您的首选 id,然后切片:
out = df.loc[df['client_id'].eq(1).groupby(df['location_id'], wort=False).idxmax()]
输出:
client_id location_id region_name location_name
0 1 123 Florida location_ABC
2 6 845 Miami(P) location_THE
3 1 386 Boston location_WOP
关于python - 在多行之间过滤和应用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73953999/