我正在使用它来有条件地选择column
行:
X.loc[data['column'] == 1]
但是我想将这个条件扩展到几个列。这些列有一些共同点:它们包含相同的字符串。实际上我有一个column1
,一个column2
,...,column100
等等,这个条件应该适用于所有这些列。实际上是这样的(通配符):
X.loc[data['column*'] == 1]
这些条件应与OR
相关联。有机会轻松做到这一点吗?
答案 0 :(得分:5)
对于某些数据框X
p A p B p C
0 0 0 0
1 0 0 0
2 0 0 1
3 0 0 0
4 0 0 0
5 0 0 0
6 1 0 0
如果您可以在col_list
col_list = X.columns
然后,您可以使用np.any()
在每个地方进行测试:
X.loc[(X[col_list] == 1).any(axis=1)]
这给了你:
p A p B p C
2 0 0 1
6 1 0 0
通知你不需要loc
并且仍然会得到相同的答案,归功于@MaartynFabre的信息
X[(X[col_list] == 1).any(axis=1)]
p A p B p C
2 0 0 1
6 1 0 0
答案 1 :(得分:3)
(
使用所有列的测试
创建一个新的数据框 col0 col1 col2
0 1 1 2
1 1 1 1
2 2 2 2
结果
result_s = d.concat((df['col%i'%i] == 1 for i in range(3)), axis=1).all(axis=1)
如果你做0 False
1 True
2 False
dtype: bool
,你会得到
df[result_s]
这会选择所有列为 col0 col1 col2
1 1 1 1
的行。如果其中一行足够,请将==1
更改为.all()
.any
答案 2 :(得分:1)
将每个比较放在括号中并将它们与逻辑运算符组合:
pd.DataFrame(X).loc[(data['col1']==23) & (data['col2']==42)] # and
pd.DataFrame(X).loc[(data['col1']==23) | (data['col2']==42)] # or
答案 3 :(得分:0)
这是另一种考虑方式:
df
col0 col1 col2
0 1 1 2
1 1 1 1
2 2 2 2
df.loc[df['col0'] == 1, [x for x in df.columns if x == 'col0']]
col0
0 1
1 1
您可以使用列表推导来查找您要查找的列。