首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在pandas中选择列值相同的行?

如何在pandas中选择列值相同的行?
EN

Stack Overflow用户
提问于 2019-11-18 13:12:24
回答 2查看 40关注 0票数 0

我有一个有9列的df。每列都有值0,1。

1个-means异常值。

这是根据9种不同算法得出的异常值。我想选择那些真正的异常值,下面的查询是可行的。

代码语言:javascript
复制
true_outliers= outliers[ 
        (outliers['isolation_forest_300000']==1) & 
        (outliers['knn_1000']==1) &
        (outliers['knn_10000']==1)&
        (outliers['abod_neighbors_5_1000']==1)&
        (outliers['abod_neighbors_5_10000']==1)&
        (outliers['abod_neighbors_10_1000']==1)&
        (outliers['hbos_1000']==1)&
        (outliers['hbos_10000']==1)&
        (outliers['hbos_100000']==1)]

但是,我如何像这样重构它:

代码语言:javascript
复制
for col in outliers.columns.tolist():
     s= outliers[outliers[col] == 1]

我希望它遍历循环,并且只选择每列中为'1‘的那些行

EN

回答 2

Stack Overflow用户

发布于 2019-11-18 13:29:23

如果希望在每列上都使用1选择行,则使用掩码更好

示例df

代码语言:javascript
复制
Out[266]:
   isolation_forest_300000  knn_1000  knn_10000  abod_neighbors_5_1000  \
0                        1         1          1                      1
1                        0         0          0                      1
2                        0         0          0                      0
3                        1         1          1                      1

   abod_neighbors_5_10000  abod_neighbors_10_1000  hbos_1000  hbos_10000  \
0                       1                       1          1           1
1                       1                       0          0           0
2                       0                       0          0           0
3                       1                       1          1           1

   hbos_100000
0            1
1            0
2            0
3            1

使用eqall创建蒙版和切片

代码语言:javascript
复制
df[df.eq(1).all(1)]

Out[267]:
   isolation_forest_300000  knn_1000  knn_10000  abod_neighbors_5_1000  \
0                        1         1          1                      1
3                        1         1          1                      1

   abod_neighbors_5_10000  abod_neighbors_10_1000  hbos_1000  hbos_10000  \
0                       1                       1          1           1
3                       1                       1          1           1

   hbos_100000
0            1
3            1
票数 1
EN

Stack Overflow用户

发布于 2019-11-18 14:56:53

我认为这可以帮助你:

代码语言:javascript
复制
import functools
import operator
import pandas as pd

data = [[0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 1, 0, 0, 0],
        [0, 0, 1, 0, 0, 0, 0, 1, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 1, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1],
        [0, 0, 0, 0, 0, 0, 0, 0, 0]]

df = pd.DataFrame(
    data, columns=[str(i) for i in range(9)]
)

condition = functools.reduce(
    operator.and_,
    (df[col] == 1 for col in df.columns)
)

print(df[condition])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58908304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档