在python中如何计算数据帧的所有唯一值而不重复计算?

在python中如何计算数据帧的所有唯一值而不重复计算?,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个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列,有不

假设我有一个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,则只计算1 a。预期的输出是这样的

Factor   Count
  A        3
  B        3
  D        2
  F        2
 Nan       2
我使用了有人帮助的代码

df.stack(dropna=False).value_counts(dropna=False)

我曾使用if来删除重复计数,但我想知道是否有一种实用而简单的方法可以做到这一点,就像上面的代码一样,而不是使用if,因为我所做的是没有效率的。

下面是一种遵循您的逻辑的方法,另外在
级别=0
上使用
groupby
链接条件检查

s = df.stack(dropna=False)
s.groupby(level=0).apply(lambda x: x[~x.duplicated()]).value_counts(dropna=False)


您可以使用
Series.unique
+
Series.value\u计数

s = pd.Series(np.hstack(df.T.apply(pd.Series.unique))).value_counts(dropna=False)


A
怎么能有四个计数遵循您的逻辑,如果有3行?我的错,我应该是3对不起是的,我的错,抱歉刚刚更改了它我理解你所做的逻辑,但当我应用到我的代码时,它会返回错误值错误:数组必须都是相同的长度,我真的不知道为什么它会返回错误对我来说,它工作正常..@anky有什么想法吗?代码在您提供的示例数据上运行良好吗?不,我只是检查了一下,它实际上并没有给我相同的错误。错误是由于旧版本的pandas引起的,如果它可以帮助某人更新pandas,并且它将工作得很好。
s = pd.Series(np.hstack(df.T.apply(pd.Series.unique))).value_counts(dropna=False)
B      3
A      3
F      2
D      2
NaN    2
dtype: int64