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