从datafram中删除值分布极不均匀的列

2024-04-26 18:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下代码:

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[_])}

我想从dataframe中删除所有列,其中一个值比列中所有其他值一起出现的频率都高。在本例中,我想删除第4列和第6列(请参阅注释),因为数字1出现的频率高于这些列中所有其他数字的出现频率(第4列中的6>;2和第6列中的7>;1)。我不想删除第一列(4=4)。我该怎么做?你知道吗


Tags: columns代码inimportgtnumpypandasdf
1条回答
网友
1楼 · 发布于 2024-04-26 18:31:41

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

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

相关问题 更多 >