1

I have a dataframe。

   A  B
0  2  3
1  2  4
2  3  5

If the value of a column has more than 2 different values, I will remove. expect the output:

   A
0  2
1  2
2  3
wangtianye
  • 306
  • 1
  • 5

2 Answers2

3

You can use .nunique() and .loc, passing a boolean

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

An alternative approach (credit to this answer):

criteria = df.nunique() <= 2
df[criteria.index[criteria]]
Brendan
  • 3,901
  • 15
  • 23
1

Use for loop and value_count to get the result:-

df = pd.DataFrame(data= {'A':[2,2,3], 'B':[3,4,5]})
for var in df.columns:
    result = df[var].value_counts()
    if len(result)>2:
        df.drop(var, axis=1,inplace=True)
df

Output

    A
 0  2
 1  2
 2  3
Rahul charan
  • 765
  • 7
  • 15