我有以下数据框
id device
814 desktop
814 mobile
236 mobile
498 desktop
348 mobile
287 mobile
287 desktop
我想查询id's
设备既是mobile & desktop
的地方
df.loc[(df['device'] == 'mobile') & (df['device'] == 'desktop'), ['id','device']]
输出应为
id device
814 desktop
814 mobile
287 desktop
287 mobile
相反,我只是得到一个空的数据框
id device
答案 0 :(得分:3)
&
运算符用于指定多个条件,每个条件必须为True
。因此,给定系列(s == 'mobile') & (s == 'desktop')
的掩码s
将始终返回空数据帧。
相反,您可以为每个device
将set
到id
分组。然后使用set.issubset
或等效的语法糖<=
:
g = df.groupby('id')['device'].apply(set)
search = {'mobile', 'desktop'}
res = df[search <= df['id'].map(g)]
print(res)
id device
0 814 desktop
1 814 mobile
5 287 mobile
6 287 desktop
答案 1 :(得分:2)
您还可以使用设置交集
cond1 = df[df.device == 'desktop'].id.values
cond2 = df[df.device == 'mobile'].id.values
set(cond1) & set(cond2)
给予
{287, 814}
然后
df.loc[df.id.isin(x)]
id device
0 814 desktop
1 814 mobile
5 287 mobile
6 287 desktop