What we can do is apply nunique to calculate the number of unique values ββin df and remove columns that have only one unique value:
In [285]: cols = list(df) nunique = df.apply(pd.Series.nunique) cols_to_drop = nunique[nunique == 1].index df.drop(cols_to_drop, axis=1) Out[285]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7
Another way is to simply diff numeric columns and sums them:
In [298]: cols = df.select_dtypes([np.number]).columns diff = df[cols].diff().sum() df.drop(diff[diff== 0].index, axis=1)β Out[298]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7
Another approach is to use a property that the standard deviation will be zero for a column with the same value:
In [300]: cols = df.select_dtypes([np.number]).columns std = df[cols].std() cols_to_drop = std[std==0].index df.drop(cols_to_drop, axis=1) Out[300]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7
Actually, this can be done in a single-line layer:
In [306]: df.drop(df.std()[(df.std() == 0)].index, axis=1) Out[306]: index id name data1 0 0 345 name1 3 1 1 12 name2 2 2 5 2 name6 7
Edchum
source share