根据最常见的值删除列

时间:2017-06-03 09:25:52

标签: python pandas numpy dataframe

你可以从wtf开始,但我想如果可以根据以下条件删除列:

 drop column if 1 of the unique values of that column represent 70% of the samples.

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

是的,这是可能的。

考虑以下DataFrame:

prng = np.random.RandomState(0)
df = pd.DataFrame(prng.choice([1, 2, 3], p=[0.7, 0.15, 0.15], size=(100, 5)))

您可以通过以下方式获取每列的每个唯一值的百分比:

df.apply(pd.Series.value_counts, normalize=True)
Out: 
      0     1     2     3     4
1  0.77  0.73  0.78  0.62  0.70
2  0.09  0.14  0.07  0.18  0.12
3  0.14  0.13  0.15  0.20  0.18

请注意,前三列的唯一值大于70%。您可以通过每列的最大值检查它,并将其作为布尔数组传递:

df.apply(pd.Series.value_counts, normalize=True).max() > 0.7
Out: 
0     True
1     True
2     True
3    False
4    False
dtype: bool

现在,如果您只想选择< 70%唯一值的那些,请使用:

df.loc[:, ~(df.apply(pd.Series.value_counts, normalize=True).max() > 0.7)]
Out: 
    3  4
0   1  1
1   3  1
2   3  1
3   2  3
4   2  1
...