首页 > 解决方案 > 如何在不重复计算的情况下计算 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,因为我所做的事情效率不高。

标签: pythonpandasdataframe

解决方案


这是一种遵循您的逻辑的方法,另外使用groupbyon链接条件检查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

推荐阅读