根据另一列中的值从一列中选择值-python

时间:2019-09-25 12:00:41

标签: python pandas

我有一个看起来像这样的大数据框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   

我正在尝试查找并选择在DeviceID列中记录了单个Location并带有“内部”和“外部”值的行。

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

DeviceID     Location
2            Internal   
2            Internal   
4            Internal   
4            Internal   

到目前为止,我尝试过的是: indexDI = df[(df['Location'] == 'Internal') & df['Location'] == 'External') ].index df.drop(indexDI, inplace = True)

但是这似乎必须删除所有带有“内部”的行。

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:1)

您可以eg. strings[0][0] == 'f' and strings[1][0] == 's' groupbynunique来查看哪些组包含两个不同的值,并使用结果对数据帧执行布尔索引:

transform

为熊猫的RangeIndex简单添加df[df.groupby('DeviceID').Location.transform('nunique').eq(1)] DeviceID Location 2 2 Internal 3 2 Internal 7 4 Internal 8 4 Internal

答案 1 :(得分:0)

一种解决方案是遍历整个df,如果同时满足两个条件,则删除行。现在,您的解决方案将检查不能同时具有两个条件的同一行。

答案 2 :(得分:0)

没有.loc的另一种解决方案,

df[(df.groupby('DeviceID').transform('nunique')!=2).values]

O / P:

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