【问题标题】:Best way to select rows and respective columns below a certain value in pandas在熊猫中选择低于某个值的行和相应列的最佳方法
【发布时间】:2021-08-11 16:06:59
【问题描述】:

我有一个包含 30 多列的大型数据框。

前两列(“A”和“B”)包含有关某个功能的一般信息,而其余列代表该功能的不同实验。

我想将我的数据框分割为仅包含具有相应列的行,其中任何值都低于阈值,并且还包括 A 列和 B 列。

我当前的代码如下所示:

df=df.loc[df.le(0.05).any(1),].reindex(colums=["A","B"]+list(df.columns[df.le(0.05).any(0)]))

虽然它有效,但这看起来很不雅。有没有“更好”的方法?

编辑: 示例

A B C D E
1 10 0.9 0.8 0.04
1 20 0.7 0.6 0.5
2 5 0.1 0.01 0.3

结果

A B D E
1 10 0.8 0.04
2 5 0.01 0.3

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    让我们从这个输入开始:

    import numpy as np
    np.random.seed(1)
    df = pd.concat([pd.DataFrame({'A': ['feature']*5,
                                  'B': ['feature']*5,}),
                    pd.DataFrame({'col%s' % i: np.random.randint(0,5,5) for i in range(10)})
                   ], axis=1)
    

    输入:

             A        B  col0  col1  col2  col3  col4
    0  feature  feature     3     0     1     3     4
    1  feature  feature     4     0     2     4     1
    2  feature  feature     0     1     4     2     1
    3  feature  feature     1     4     2     4     0
    4  feature  feature     3     4     4     2     1
    

    现在我们选择没有至少一个 0 的行(只是一个例子,你可以在这里使用任何选择器):

    df[df.drop(['A', 'B'], axis=1).le(0).any(axis=1)]
    

    输出:

             A        B  col0  col1  col2  col3  col4
    0  feature  feature     3     0     1     3     4
    1  feature  feature     4     0     2     4     1
    2  feature  feature     0     1     4     2     1
    3  feature  feature     1     4     2     4     0
    

    【讨论】:

    • 我的目标是在您的示例中也删除 col2 和 col3 。我想要任何值低于阈值的行,并且只想要相关的列(因此应该删除示例中从不包含 0 的列)
    【解决方案2】:

    试试:

    df=df.loc[df.le(0.05).any(1),['A','B',*df.columns[df.le(0.05).any(0)]]]
    #OR
    df=df.loc[df.le(0.05).any(1),(df.le(0.05).any(0)) | (df.columns.isin(['A','B']))]
    

    df的输出:

        A   B   D       E
    0   1   10  0.80    0.04
    2   2   5   0.01    0.30
    

    【讨论】:

    • @GeorgB 请检查答案:)
    • 那是我最初的方法,但不再支持给 loc 列表点赞。
    • @GeorgB 你的熊猫版本是什么?两个代码都给你这个警告?
    • 1.1.3 第二个选项省略A列和B列
    • 将 pandas 更新到 1.31,两个版本都可以使用 :)
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    相关资源
    最近更新 更多