如何使用布尔列过滤 pandas dataframe
您可以使用以下方法根据布尔列值过滤 pandas DataFrame 中的行:
方法1:根据布尔列过滤DataFrame
#filter for rows where value in 'my_column' is True df. loc [df. my_column ]
方法2:根据多个布尔列过滤DataFrame
#filter for rows where value in 'column1' or 'column2' is True df. loc [df. column1 | df. column2 ]
以下示例展示了如何在实践中使用以下 pandas DataFrame 的每种方法:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], ' points ': [18,20, 25, 40, 34, 32, 19], ' all_star ': [True, False, True, True, True, False, False], ' starter ': [False, True, True, True, False, False, False]}) #view DataFrame print (df) team points all_star starter 0 A 18 True False 1 B 20 False True 2 C 25 True True 3 D 40 True True 4 E 34 True False 5 F 32 False False 6 G 19 False False
示例 1:根据布尔列过滤 DataFrame
我们可以使用以下语法来过滤 pandas DataFrame 以仅包含all_star列中的值为 True 的行:
#filter for rows where 'all_star' is True df. loc [df. all_star ] team points all_star starter 0 A 18 True False 2 C 25 True True 3 D 40 True True 4 E 34 True False
请注意,DataFrame 已被过滤为仅包含all_star列中值为 True 的行。
如果您想过滤all_star为 False 的行,只需在列名前面键入波形符 ( ~ ):
#filter for rows where 'all_star' is False df. loc [ ~ df. all_star ] team points all_star starter 1 B 20 False True 5 F 32 False False 6 G 19 False False
DataFrame 现在已被过滤为仅包含all_star列中值为 False 的行。
示例 2:根据多个布尔列过滤 DataFrame
我们可以使用以下语法来过滤 pandas DataFrame 以仅包含all_star列或start列值为 True 的行:
#filter for rows where 'all_star' or 'starter' is True df. loc [df. all_star | df. starter ] team points all_star starter 0 A 18 True False 1 B 20 False True 2 C 25 True True 3 D 40 True True 4 E 34 True False
请注意,DataFrame 已被过滤为仅包含all_star或starter列中值为 True 的行。
如果要过滤all_star和starter列中值为 True的行,可以使用&运算符而不是|操作员:
#filter for rows where 'all_star' and 'starter' is True df. loc [df. all_star & df. starter ] team points all_star starter 2 C 25 True True 3 D 40 True True
现在,DataFrame 已被过滤为仅包含all_star和starter列中的值为 True 的行。
其他资源
以下教程解释了如何在 pandas 中执行其他常见任务:
Pandas:使用布尔系列从 DataFrame 中选择行
Pandas:如何根据条件创建布尔列
Pandas:如何将布尔值转换为整数值