在Pandas中,当选择“where”时,删除不满足条件的列而不是填充NaN

时间:2016-07-29 10:48:25

标签: python pandas

在Numpy中,使用where将为您提供原始数组的子集。例如,

import numpy as np
np.where(np.arange(5)>2)[0]

将返回array([3, 4])。我想和熊猫做类似的事情。但是,如果我像这样定义一个类似的DataFrame:

import pandas as pd
df = pd.DataFrame(data=range(5)).T

产生df,看起来像

   0  1  2  3  4
0  0  1  2  3  4

并申请

df.where(lambda x: x>2)

我得到了

    0   1   2  3  4
0 NaN NaN NaN  3  4

但是,我想得到这个:

    3  4
0   3  4

省略了未满足条件的列。怎么办呢?

2 个答案:

答案 0 :(得分:3)

IIUC您可以致电dropna传递axis=1以删除包含任何NaN值的列:

In [272]:
df[df > 2].dropna(axis=1)

Out[272]:
   3  4
0  3  4

答案 1 :(得分:0)

如果列值大于2,则可以删除列名称小于3的列,如果列名称为整数

print(df.drop(df[df.columns[df.columns < 3]] > 2, 1))

输出:

   3  4
0  3  4