仅返回满足where子句的数据框列

时间:2018-12-28 20:20:40

标签: python pandas

从任意数据帧开始,我想返回一个仅包含具有多个不同值的列的数据帧。

我有:

X = df.nunique()

喜欢:

    Id               5
    MSSubClass       3
    MSZoning         1
    LotFrontage      5
    LotArea          5
    Street           1
    Alley            0
    LotShape         2

然后我将其从系列转换为数据框:

X = X.to_frame(name = 'dcount')

然后我使用where子句仅返回值> 1:

X.where(X[['dcount']]>1)

如下所示:

                   dcount
    Id                5.0
    MSSubClass        3.0
    MSZoning          NaN
    LotFrontage       5.0
    LotArea           5.0
    Street            NaN
    Alley             NaN
    LotShape          2.0
    ...

但是我现在只想要那些没有dcount ='NaN'的column_names(在X的索引中),这样我最终可以回到我的原始数据帧df并将其定义为:

df=df[[list_of_columns]]

该如何完成?我尝试了很多方法,这是PitA。我怀疑有一种方法可以用1或2行代码来实现。

1 个答案:

答案 0 :(得分:3)

您可以使用布尔索引,避免将计数系列转换为数据框:

counts = df.nunique()
df = df[counts[counts > 1].index]

关键是要注意您的counts系列的 index 是列标签。因此,您可以过滤序列,然后通过pd.Series.index提取所需的索引。

这是一个示范:

df = pd.DataFrame({'A': [1, 1, 1], 'B': [1, 2, 3],
                   'C': [4, 5, 5], 'D': [0, 0, 0]})

counts = df.nunique()
df = df[counts[counts > 1].index]

print(df)

   B  C
0  1  4
1  2  5
2  3  5