python - 如何在不重复计算的情况下计算 python 中数据框的所有唯一值?
问题描述
假设我有一个看起来像这样的 python 数据框:
Factor_1 Factor_2 Factor_3 Factor_4 Factor_5
A B A Nan Nan
B D F A Nan
F A D B A
像这样的东西,其中我有 5 个具有不同因素的列。我想创建一个列来计算有多少这些因素出现在 dtaframe 中,但如果值出现在一行中,则不重复计算,如果值出现在一行中,则仅将其计为 1,例如,如果一行有 A,B , C, A, A 只计算 1 个 A。预期的输出将是这个。
Factor Count
A 3
B 3
D 2
F 2
Nan 2
我使用了我得到帮助的代码
df.stack(dropna=False).value_counts(dropna=False)
我正在使用 if 来删除双重计数,但我想知道是否有一种实用且简单的方法来执行此操作,例如上面的代码,而不是使用 If,因为我所做的事情效率不高。
解决方案
这是一种遵循您的逻辑的方法,另外使用groupby
on链接条件检查level=0
s = df.stack(dropna=False)
s.groupby(level=0).apply(lambda x: x[~x.duplicated()]).value_counts(dropna=False)
A 3
B 3
D 2
F 2
NaN 2
dtype: int64
推荐阅读
- javascript - 将字符串转换为对象js函数
- gradle - 使用自定义 gradle 包装器的 Allure gradle 冲突
- html - Flexbox 使子宽度保持静态,每行设置数量
- c# - 我应该在 .net 核心 Web 应用程序中的哪里定义 API 端点?
- jquery - 使用 gtag.js 进行单页应用程序跟踪不起作用
- jquery - jQuery on-input 更改事件更新自我
- git - 用于下载和更新本地工作副本的 git 术语
- sql - 跨多个表选择条件布尔值
- pyinstaller - pyinstaller:创建一个可执行文件
- r - Keras 中一维卷积的展平层