use*_*526 6 python conditional-statements dataframe pandas
我有一个看起来像这样的数据框。
col1 col2
0 something1 something1
1 something2 something3
2 something1 something1
3 something2 something3
4 something1 something2
Run Code Online (Sandbox Code Playgroud)
我试图筛选都行something1
无论是在col1
或col2
。如果我只需要在列上使用条件逻辑,就可以做到这一点,df[df.col1 == 'something1']
但是有没有办法在多列上做到这一点?
Nao*_*man 11
为什么不:
df[(df.col1 == 'something1') | (df.col2 == 'something1')]
Run Code Online (Sandbox Code Playgroud)
输出:
col1 col2
0 something1 something1
2 something1 something1
4 something1 something2
Run Code Online (Sandbox Code Playgroud)
你可以用all
与boolean indexing
:
print ((df == 'something1').all(1))
0 True
1 False
2 True
3 False
4 False
dtype: bool
print (df[(df == 'something1').all(1)])
col1 col2
0 something1 something1
2 something1 something1
Run Code Online (Sandbox Code Playgroud)
编辑:
如果需要选择某些列,您可以使用isin
与boolean indexing
用于选择所需columns
,然后使用subset
- df[cols]
:
print (df)
col1 col2 col3
0 something1 something1 a
1 something2 something3 s
2 something1 something1 r
3 something2 something3 a
4 something1 something2 a
cols = df.columns[df.columns.isin(['col1','col2'])]
print (cols)
Index(['col1', 'col2'], dtype='object')
print (df[(df[cols] == 'something1').all(1)])
col1 col2 col3
0 something1 something1 a
2 something1 something1 r
Run Code Online (Sandbox Code Playgroud)