繁体   English   中英

Select 列在 pandas 中呈现特定条件

[英]Select columns that present a specific condition in pandas

我有一个 dataframe 相关物种和地点。 每个单元格包含一个丰度值。 我只想 select 那些在任何地点的丰度高于 5 的物种。

输入:

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

理想的 output:

    Species_1 Species3
Site_1 0 1
Site_2 0 0
Site_3 6 7

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

尝试这个

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()]

output:

    Species_1   Species_3
Site_1  0   1
Site_2  0   0
Site_3  6   7

这是一个数据框,其中 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

以下是仅返回 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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM