Select 在 pandas 中呈现特定条件的列

Select columns that present a specific condition in pandas

我有一个与物种和地点相关的数据框。每个单元格都包含一个丰度值。我只想 select 仅那些在任何地点呈现出高于 5 的物种。

输入:

#df
        Species_1 Species_2 Species_3
    Site_1 0 0 1
    Site_2 0 0 0
    Site_3 6 0 7

理想的输出:

    Species_1 Species3
Site_1 0 1
Site_2 0 0
Site_3 6 7

假设我有一个 150 x 150 的数据框,我想 select 客观地 select 每一列而不写他们的名字。 我设法为数据框写了一个掩码(例如 mask = df > 5),但我不知道如何 select 只有那些至少呈现一个“真”值的列。

这是一个数据框,其中 species_2 在任何站点都不会出现 >5,即使它在所有站点的总和都大于 5:

import pandas as pd

df = pd.DataFrame({'Species_1': {'Site_1': 0, 'Site_2': 0, 'Site_3': 6},
                   'Species_2': {'Site_1': 3, 'Site_2': 2, 'Site_3': 1},
                   'Species_3': {'Site_1': 1, 'Site_2': 0, 'Site_3': 7}})
print(df)
#
        Species_1  Species_2  Species_3
Site_1          0          3          1
Site_2          0          2          0
Site_3          6          1          7

这里是你如何 return 只有 Species_1 和 Species_3:

df = df[df > 5]
df.dropna(axis=1, how= "all", inplace=True)
print(df.columns.to_list())

#['Species_1', 'Species_3']

试试这个

df = pd.DataFrame({'Species_1': {'Site_1': 0, 'Site_2': 0, 'Site_3': 6}, 'Species_2': {'Site_1': 0, 'Site_2': 0, 'Site_3': 0}, 'Species_3': {'Site_1': 1, 'Site_2': 0, 'Site_3': 7}, 'Species_4': {'Site_1': 2, 'Site_2': 2, 'Site_3': 2}})
#        Species_1  Species_2  Species_3  Species_4
#Site_1          0          0          1          2
#Site_2          0          0          0          2
#Site_3          6          0          7          2

df.loc[:, (df > 5).any()]
#        Species_1  Species_3
#Site_1          0          1
#Site_2          0          0
#Site_3          6          7

使用这个怎么样:

df.loc[:, df.gt(5).any()]

输出:

    Species_1   Species_3
Site_1  0   1
Site_2  0   0
Site_3  6   7