提问人:surfer349 提问时间:4/26/2023 最后编辑:surfer349 更新时间:4/28/2023 访问量:57
df 根据另一个 col 的 groupby 搜索 null cols?
df search for null cols based on groupby of another col?
问:
寻找输入。试图查找具有其他 cols 人口组之一 null 的 col.....就像一台机器的传感器停止工作一样。
Group col1 col2 col3
A NaN 9.94 93.78
A NaN 1.11 50.56
A NaN 6.20 26.18
A 0.13 8.46 92.36
A NaN 5.31 70.67
B NaN 4.56 NaN
B 0.05 4.44 NaN
B NaN 6.36 NaN
B NaN 5.36 NaN
B NaN NaN NaN
#drop cols that have>85% null
nan_cols85 = [i for i in df.columns if df[i].isnull().sum() > 0.85*len(df)]
df.drop(nan_cols85,axis=1, inplace=True)
我已经把这个 85% 测试放在一起,但它只是将该列的所有行放在一起。即使 GroubB 具有有效数据,如何测试 GroupA 的所有行是否都为 null?
例如:col1 未通过 85% 测试,但 col3 未通过。我想将 col3 识别为失败并删除该 col
答:
0赞
Nick
4/28/2023
#1
您可以在聚合中使用类似的逻辑来确定要删除的列:groupby
nan_groups85 = df.groupby('Group').agg(lambda g:g.isnull().sum() > 0.85*len(g))
#
# col1 col2 col3
# Group
# A False False False
# B False False True
请注意,对于样本数据,每个组的比率仅为 80%,因此不符合测试。col1
现在,您可以使用逻辑 OR 每列的值:any
nan_cols85 = nan_groups85.any()
#
# col1 False
# col2 False
# col3 True
# dtype: bool
最后,我们可以删除值为 的列。True
df = df.drop([col for col, isnan in nan_cols85.items() if isnan], axis=1)
输出:
Group col1 col2
0 A NaN 9.94
1 A NaN 1.11
2 A NaN 6.20
3 A 0.13 8.46
4 A NaN 5.31
5 B NaN 4.56
6 B 0.05 4.44
7 B NaN 6.36
8 B NaN 5.36
9 B NaN NaN
评论