[英]Python pandas: Select columns where a specific row satisfies a condition
[英]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.