基于另一列(python)中的值从一列中选择值

基于另一列(python)中的值从一列中选择值,python,pandas,Python,Pandas,我有一个大数据帧df1,看起来像这样: DeviceID Location 1 Internal 1 External 2 Internal 2 Internal 3 Internal 3 External 3 Internal 4 Internal 4 I

我有一个大数据帧
df1
,看起来像这样:

DeviceID     Location
1            Internal
1            External   
2            Internal   
2            Internal   
3            Internal   
3            External   
3            Internal
4            Internal   
4            Internal
5            External   
5            Internal   
我试图查找并选择在
位置
列中同时记录了“内部”和“外部”值的单个
设备ID
的行

下一步是从数据帧中删除这些行。最终的数据帧df2将如下所示:

DeviceID     Location
2            Internal   
2            Internal   
4            Internal   
4            Internal   
到目前为止,我尝试的是:
indexDI=df[(df['Location']='Internal')&df['Location']='External')。索引
df.drop(indexDI,inplace=True)

但这似乎必须删除所有带有“Internal”的行


任何帮助都将不胜感激:)

您可以使用
groupby
transform
,查看哪些gorup包含两个不同的值,并使用结果对数据帧执行布尔索引:

df[df.groupby('DeviceID').Location.transform('nunique').eq(1)]

     DeviceID  Location
2         2  Internal
3         2  Internal
7         4  Internal
8         4  Internal


简单的add
reset\u index(drop=True)
对于熊猫的

一个解决方案是在整个df中循环,如果两个条件都满足,则删除行。现在,您的解决方案检查同一行,该行不能同时具有两个条件。

还有一个不带.loc的解决方案

df[(df.groupby('DeviceID').transform('nunique')!=2).values]
O/p:


如果您展示正在运行的示例,这将是可观的。您不需要
.loc
<代码>重置索引也不是真的需要。是的,尽管范围索引可能是op想要的。但是,是的,我想我会加上一个便条@QuangHoangDon'忘记你可以投票并接受答案,明白吗。谢谢
   DeviceID  Location
2         2  Internal
3         2  Internal
7         4  Internal
8         4  Internal