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
我有一个与物种和地点相关的数据框。每个单元格都包含一个丰度值。我只想 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