我想从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)
但是,必须有更简单直接的方法。他们是什么?
最诚挚的问候
答案 0 :(得分:3)
应用nunique
,然后删除nunique
为1
的列:
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]
将为符合要求的所有列提供名称