我有一个看起来像这样的大数据框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)
但是这似乎必须删除所有带有“内部”的行。
任何帮助将不胜感激:)
答案 0 :(得分:1)
您可以eg. strings[0][0] == 'f' and strings[1][0] == 's'
,groupby
和nunique
来查看哪些组包含两个不同的值,并使用结果对数据帧执行布尔索引:
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