生成条件以选择 pandas.DataFrame 中的行
Generate condition for selecting rows in pandas.DataFrame
对于数据框 df,我在 'a' 或 'b' 列中选择具有 True 值的行。
>>> df
Out[127]:
a b
0 False False
1 True True
2 True False
>>> con = (df['a'] == True) | (df['b'] == True)
>>> con
Out[129]:
0 False
1 True
2 True
dtype: bool
>>> df[con]
Out[130]:
a b
1 True True
2 True False
数据框中只有两列。对于实际代码,此类列的数量是一个变量。如何即时生成条件 con
?
说,当 df 有从 a 到 z 的 26 列时,我想要
>>> con = (df['a'] == True) | (df['b'] == True) | ... (df['y'] == True) | (df['z'] == True)
我可以用它来获取所需的行
您可以使用 DataFrame.any
:
>>> df = pd.DataFrame(np.random.choice([True]+[False]*5, size=(6,5)), columns=list("abcde"))
>>> df
a b c d e
0 False False False False False
1 False False True False False
2 False False True False False
3 False False False False False
4 False False False False True
5 False False False False False
>>> df.any(axis=1)
0 False
1 True
2 True
3 False
4 True
5 False
dtype: bool
>>> df[df.any(axis=1)]
a b c d e
1 False False True False False
2 False False True False False
4 False False False False True
和往常一样,如果您想确保对原件有句柄,可以使用 df.loc[df.any(axis=1)]
。
对于数据框 df,我在 'a' 或 'b' 列中选择具有 True 值的行。
>>> df
Out[127]:
a b
0 False False
1 True True
2 True False
>>> con = (df['a'] == True) | (df['b'] == True)
>>> con
Out[129]:
0 False
1 True
2 True
dtype: bool
>>> df[con]
Out[130]:
a b
1 True True
2 True False
数据框中只有两列。对于实际代码,此类列的数量是一个变量。如何即时生成条件 con
?
说,当 df 有从 a 到 z 的 26 列时,我想要
>>> con = (df['a'] == True) | (df['b'] == True) | ... (df['y'] == True) | (df['z'] == True)
我可以用它来获取所需的行
您可以使用 DataFrame.any
:
>>> df = pd.DataFrame(np.random.choice([True]+[False]*5, size=(6,5)), columns=list("abcde"))
>>> df
a b c d e
0 False False False False False
1 False False True False False
2 False False True False False
3 False False False False False
4 False False False False True
5 False False False False False
>>> df.any(axis=1)
0 False
1 True
2 True
3 False
4 True
5 False
dtype: bool
>>> df[df.any(axis=1)]
a b c d e
1 False False True False False
2 False False True False False
4 False False False False True
和往常一样,如果您想确保对原件有句柄,可以使用 df.loc[df.any(axis=1)]
。