首页 > 解决方案 > 熊猫根据位置在一系列列上的布尔值选择行

问题描述

我有一个df

Name   Param_1   Param_2   Param_3
John   True      False     False 
Mary   False     False     False
Peter  True      False     False 
Linda  False     False     True 

我想根据列( 和 )范围内的 or 值创建两个新数据True框。像这样的东西...FalseParams_1Params_2Params_3

df_1 =
Name   Param_1   Param_2   Param_3
John   True      False     False
Peter  True      False     False
Linda  False     False     True

df_2 = 
Name   Param_1   Param_2   Param_3
Mary   False      False     False

但是,每次运行代码时我都不知道 Param_1 等的名称,所以我想使用位置索引(切片)。在这种情况下,[:, 1:]

我已经看到了基于一列中的值选择行的示例,当列具有已知名称时,而不是通过按位置跨多列切片。

我试过ais_gdf.iloc[ais_gdf[:, 1:].isin(False)]了,但没有用。任何帮助表示赞赏。

标签: pandas

解决方案


用于DataFrame.iloc掩码的选择列并测试是否至少有一个TrueDataFrame.any,然后按 过滤boolean indexing,用于df_2反转掩码 按~

m = ais_gdf.iloc[:, 1:].any(axis=1)
#alternative for select only boolean columns
#m = ais_gdf.select_dtypes(bool).any(axis=1)
#alternative1 for columns names with with Param
#m = ais_gdf.filter(like='Param').any(axis=1)
df_1 = ais_gdf[m]
df_2 = ais_gdf[~m]

print (df_1)
    Name  Param_1  Param_2  Param_3
0   John     True    False    False
2  Peter     True    False    False
3  Linda    False    False     True

print (df_2)
   Name  Param_1  Param_2  Param_3
1  Mary    False    False    False

推荐阅读