如何从熊猫数据框中选择包含非重复项的列

时间:2019-03-21 16:45:07

标签: python pandas

我想从pandas数据框中选择包含非重复项的列,并使用这些列构成一个子集数据框。例如,我有一个这样的数据框:

   x  y  z
a  1  2  3
b  1  2  2
c  1  2  3
d  4  2  3

“ x”和“ z”列具有不可重复的值,因此我想挑选它们并创建一个新的数据框,例如:

   x  z
a  1  3
b  1  2
c  1  3
d  4  3

可以通过以下代码实现:

import pandas as pd
df = pd.DataFrame([[1,2,3],[1,2,2],[1,2,3],[4,2,3]],index=['a','b','c','d'],columns=['x','y','z'])
df0 = pd.DataFrame()
for i in range(df.shape[1]):
    if df.iloc[:,i].nunique() > 1:
        df1 = df.iloc[:,i].T
        df0 = pd.concat([df0,df1],axis=1, sort=False)

但是,必须有更简单直接的方法。他们是什么?

最诚挚的问候

4 个答案:

答案 0 :(得分:3)

应用nunique,然后删除nunique1的列:

nunique = df.apply(pd.Series.nunique)
cols_to_drop = nunique[nunique == 1].index
df = df.drop(cols_to_drop, axis=1)

答案 1 :(得分:1)

df[df.columns[(df.nunique()!=1).values]]

也许您可以尝试这种单线。

答案 2 :(得分:0)

一个简单的班轮:

df0 = df.loc [:,(df.max()-df.min())!= 0]

甚至更好

df0 = df.loc [:,(df.max()!= df.min())]

答案 3 :(得分:0)

df =df[df.columns[df.nunique()>1]]

假设所有重复值的列与给定nunique = 1的其他列将为1。 df.columns[df.nunique()>1]将为符合要求的所有列提供名称