pandas - pandas 过滤值计数有多个答案
问题描述
假设我有这个数据框:
df = pd.DataFrame([
('max', 'park', True),
('max', 'home', False),
('max', 'somewhere', True),
('spot', 'home', False),
('spot', 'park', False),
('bell', 'home', True),
('bell', 'park', True),
], columns='name,location,seen'.split(','))
df
我如何找到在一个地方出现但在另一个地方没有出现的每个人?表达这个问题的另一种方法是如何过滤给定索引中具有多个值的 MultiIndex 系列。
df.groupby('name').seen.value_counts()
name seen
bell True 2
max True 2
False 1
spot False 2
Name: seen, dtype: int64
在这种情况下,我想过滤以查看最大值。例如,我想要这样:
解决方案
编辑:@unutbu 在评论中提供了两个优雅的解决方案:
# Option 1: groupby.transform
df.loc[df.groupby(['name'])['seen'].transform('nunique') > 1]
# Option 2: groupby.filter
df.groupby(['name']).filter(lambda x: x['seen'].nunique() > 1)
[旧答案如下]
这是使用布尔掩码选择具有两个唯一seen
值的名称的一种方法:
mask = df.groupby('name').seen.nunique().eq(2)
names = mask[mask].index
df[df['name'].isin(names)]
name location seen
0 max park True
1 max home False
2 max somewhere True
推荐阅读
- python - 将 Pandas 数据框中列表中的单词词形化
- jquery - 禁用 JQuery 后无法重新启用选择标记
- javascript - Phaser 3 具有随机 x,y 但在特定区域的精灵
- php - 为什么在我的模型上调用“find”方法会导致此错误:“App\Post 类的对象无法转换为 int”?
- python - Python:如果没有 XML 标记,则打印“空白”以及输出
- instagram - Instagram 获取带有标签的帖子
- python - 从 excel 中获取数据并使用 Python 3.6 对其进行排序的最佳方法
- r - 带有 velox 的加权平均值
- python - 基本不等于操作
- linux - Makefile 找不到 shell 命令