基于另一列(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