python - 使用 pandas 获取重复统计信息(如缺失值)的优雅方法
问题描述
我有一个如下所示的数据框
df = pd.DataFrame({'subject_id': [101,101,np.nan,201,202],
'test_id':['A1','A1','A3',np.nan,'A4']})
这在数据框中既有缺失值又有重复值
我想获得跨列缺失值和重复值的统计信息。
当我尝试以下内容时,它适用于丢失的列
percent_missing = df.isna().sum() * 100 / len(df)
pd.DataFrame({'column_name': df.columns,
'percent_missing': percent_missing})
但是对于重复项,我想像上面那样写,但这显然是不正确的。它不会按列返回我的输出(而是为我提供数据帧级别)
我不能使用,因为我想像上面使用 isna()subset
一样一次检查所有列中的重复值missing
percent_duplicates = df.duplicated().sum() * 100 / len(df)
pd.DataFrame({'column_name': df.columns,
'percent_duplicates': percent_duplicates})
我希望我的输出如下所示
解决方案
您可以使用列表推导:
df_len = len(df)
percent_duplicates = [df[col].duplicated(keep=False).sum() * 100 / df_len
for col in df]
或与apply
:
percent_duplicates = df.apply(lambda col:
col.duplicated(keep=False).sum() * 100 / df_len)
我们在哪里通过keep=False
,以便所有重复项都标记为True
,
要得到
>>> pd.DataFrame({"column_name": df.columns,
"percent_duplicates": percent_duplicates})
column_name percent_duplicates
0 subject_id 40.0
1 test_id 40.0
推荐阅读
- javascript - 在 Selenium 中使用 Java Script Executor 时无法读取未定义的属性“单击”
- deployment - UWP - 无法与本地主机 IBM Sametime 交互
- c++ - 在特定条件后调整文件大小。c ++ resize_file不能循环工作
- dapper - 将 AttachToTransaction 添加到 FastCrud 中的操作
- python-3.x - 为什么`a`也被视为二维数组?
- javascript - 为什么 typeof Function.prototype 和 typeof Fn.prototype 不同?
- html - 如何处理 div 长度的动态增长
- javascript -
元素( , ) 堆叠在手机导航栏下 - 反应 - 本机 - javascript - 需要 javascript 升序、降序的最佳排序最佳实践
- swift - 在 collectionView 的两个不同单元格中显示 highchart 和 swiftDataTable