使用LAMBDA进行DataFrame多列比较

时间:2017-03-12 23:59:35

标签: python-2.7 numpy lambda

我有一个包含一些整数值的数据帧,我想只在多列[col1,col3,col4]不是全零的情况下才创建该行的新数据帧。例如:

      col1    col2        col3    col4    col5   col6
0        0    text1          3       0      22      0
1        9    text2         13      11      22      1
2        0    text3          0       0      22      0       # not valid
3        9    text4         13      11      22      0
4        0    text5          0       1      12      4

我不确定是否可以用一个lambda来做到这一点。

1 个答案:

答案 0 :(得分:1)

根本不需要任何自定义功能。我们可以只选择我们想要的列,进行布尔比较,然后使用它来索引数据帧:

In [28]: df[["col1", "col3", "col4"]] == 0
Out[28]: 
    col1   col3   col4
0   True  False   True
1  False  False  False
2   True   True   True
3  False  False  False
4   True   True  False

In [29]: (df[["col1", "col3", "col4"]] == 0).all(axis=1)
Out[29]: 
0    False
1    False
2     True
3    False
4    False
dtype: bool

In [30]: df.loc[~(df[["col1", "col3", "col4"]] == 0).all(axis=1)]
Out[30]: 
   col1   col2  col3  col4  col5  col6
0     0  text1     3     0    22     0
1     9  text2    13    11    22     1
3     9  text4    13    11    22     0
4     0  text5     0     1    12     4

有很多类似的方法可以重写它(并非所有的零都是非零等等)。

相关问题