熊猫:为多列

时间:2017-05-17 08:17:19

标签: python pandas dataframe

我正在使用它来有条件地选择column行:

X.loc[data['column'] == 1]

但是我想将这个条件扩展到几个列。这些列有一些共同点:它们包含相同的字符串。实际上我有一个column1,一个column2,...,column100等等,这个条件应该适用于所有这些列。实际上是这样的(通配符):

X.loc[data['column*'] == 1]

这些条件应与OR相关联。有机会轻松做到这一点吗?

4 个答案:

答案 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)

测试Dataframe

(

使用所有列的测试

创建一个新的数据框
    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

您可以使用列表推导来查找您要查找的列。