python - 从 pandas 数据框中删除值分布极其不均匀的列

标签 python pandas dataframe distribution data-cleaning

给出以下代码:

import numpy as np
import pandas as pd

arr = np.array([
    [1,2,9,1,1,1],
    [2,3,3,1,0,1],
    [1,4,2,1,2,1],
    [2,3,1,1,2,1],
    [1,2,3,1,8,1],
    [2,2,5,1,1,1],
    [1,3,8,7,4,1],
    [2,4,7,8,3,3]
    ])
#    1,2,3,4,5,6 <- Number of the columns.
df = pd.DataFrame(arr)

for _ in df.columns.values:
    print {x: list(df[_]).count(x) for x in set(df[_])}

我想从数据框中删除其中一个值出现频率高于该列中所有其他值出现频率的所有列。在这种情况下,我想删除第 4 列和第 6 列(请参阅注释),因为数字 1 比这些列中所有其他数字出现的频率更高(第 4 列中的 6 > 2,第 6 列中的 7 > 1)。我不想删除第一列 (4 = 4)。我该怎么做?

最佳答案

另一个选项是对每一列进行值计数,如果计数的最大值小于或等于数据框行数的一半,则选择它:

df.loc[:, df.apply(lambda col: max(col.value_counts()) <= df.shape[0]/2)]

#   0   1   2   4
#0  1   2   9   1
#1  2   3   3   0
#2  1   4   2   2
#3  2   3   1   2
#4  1   2   3   8
#5  2   2   5   1
#6  1   3   8   4
#7  2   4   7   3

关于python - 从 pandas 数据框中删除值分布极其不均匀的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38247334/

相关文章:

python - (=.at)、(=.loc)、(.drop) 或 (.append) 过滤大型数据帧哪个更快?

python-3.x - 按索引自然排序 Pandas 数据帧

python - Sklearn,网格搜索 : how to print out progress during the execution?

python - 结合 Flask-Marshmallow 和 marshmallow-jsonapi

python - Pandas :数据框不会合并

python - 从数据帧值更新 pickle 文件

python - 从首字母为小写的数据框中删除行

python - 按内部值过滤列并获取索引

python - 并发, worker 和自动缩放之间的 celery 差异

python - 无法解码任何 JSON 对象 - tastypie - curl