熊猫不根据条件选择列

时间:2018-08-04 20:42:39

标签: python python-3.x pandas

我有以下数据框

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

2 个答案:

答案 0 :(得分:3)

&运算符用于指定多个条件,每个条件必须为True。因此,给定系列(s == 'mobile') & (s == 'desktop')的掩码s将始终返回空数据帧。

相反,您可以为每个devicesetid分组。然后使用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