从 pandas 数据框中删除值分布极不均匀的列
Delete columns with extremely unequally distributed values from pandas dataframe
给定以下代码:
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)。我该怎么做?
另一种选择是对每一列进行值计数,如果计数的最大值小于或等于数据帧行数的一半,则select它:
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
给定以下代码:
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)。我该怎么做?
另一种选择是对每一列进行值计数,如果计数的最大值小于或等于数据帧行数的一半,则select它:
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