当前位置: 首页 > 面试题库 >

在每一列的DataFrame中查找不同元素的数量

莫英卓
2023-03-14
问题内容

我正在尝试使用Pandas查找每列中不同值的计数。这就是我所做的。

import pandas as pd
import numpy as np

# Generate data.
NROW = 10000
NCOL = 100
df = pd.DataFrame(np.random.randint(1, 100000, (NROW, NCOL)),
                  columns=['col' + x for x in np.arange(NCOL).astype(str)])

我需要计算每一列的不同元素的数量,如下所示:

col0    9538
col1    9505
col2    9524

什么是最有效的方法,因为此方法将应用于大小大于1.5GB的文件?

根据答案,df.apply(lambda x: len(x.unique()))是最快的(笔记本)。

%timeit df.apply(lambda x: len(x.unique())) 10 loops, best of 3: 49.5 ms per loop %timeit df.nunique() 10 loops, best of 3: 59.7 ms per loop %timeit df.apply(pd.Series.nunique) 10 loops, best of 3: 60.3 ms per loop %timeit df.T.apply(lambda x: x.nunique(), axis=1) 10 loops, best of 3: 60.5 ms per loop


问题答案:

熊猫0.20开始, 我们可以nunique直接在DataFrames上使用,即:

df.nunique()
a    4
b    5
c    1
dtype: int64

其他旧选项:

您可以对df进行转置,然后逐行apply调用nunique

In [205]:
df = pd.DataFrame({'a':[0,1,1,2,3],'b':[1,2,3,4,5],'c':[1,1,1,1,1]})
df

Out[205]:
   a  b  c
0  0  1  1
1  1  2  1
2  1  3  1
3  2  4  1
4  3  5  1

In [206]:
df.T.apply(lambda x: x.nunique(), axis=1)

Out[206]:
a    4
b    5
c    1
dtype: int64

编辑

正如@ajcr指出的,转置是不必要的:

In [208]:
df.apply(pd.Series.nunique)

Out[208]:
a    4
b    5
c    1
dtype: int64


 类似资料:
  • 问题内容: 所以这是我的代码: 包含一个整数列表。我想比较于并打印出不在的数字相比时。 当不能比较时,我可以打印其中的元素,但是当我尝试使用上面的代码进行相反操作时,则什么也不会打印。 有什么帮助吗? 问题答案: 您的代码没有按照我认为的方式执行。该行将遍历,每次等于的一个元素。因此,在执行任何操作之前,原始列表将被覆盖。 我想你想要这样的东西: 但是您可以轻松地执行以下操作: 或(如果您不介意丢

  • 我有一个数据框,有3列,如下所示: 我想添加列,它是中一些列的总和,但不是每行的同一列,例如 只有第1行和第3行是同一列的和,第0行和第2行是其他列的和。 我在Stack over flow上发现的总是整个数据帧的特定列,但在本例中是不同的。 我能做的最好的方法是什么?

  • 问题内容: 在最近的一次采访中有人问我这个问题。 您将获得一个包含一百万个元素的数组。除了一个元素外,所有元素都是重复的。我的任务是找到独特的元素。 我的做法是要经过在整个数组循环,然后创建一个索引作为数组中和的数组中出现的次数。然后再次遍历我们的地图,并返回值为1的索引。 我说我的方法会花费时间。面试官告诉我要以低于复杂度的方式对其进行优化。我说过,我们不能,因为我们必须遍历具有一百万个元素的整

  • 在一个14节点的Google Dataproc集群中,我有大约600万个名字,它们被两个不同的系统转换为ID:和。每个包含、和。我的目标是生成从到的映射,以便对于每个,对应的是附加到的所有名称中最常见的id。 让我们试着用一个例子来澄清一下。如果我有以下行: 我的目标是生成从到的映射。实际上,与关联的名称是、和,它们分别映射到、,因此是与关联的名称中最常见的映射。同样,将映射到。假设总会有赢家是可

  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 问题内容: 我有一个清单“ a” 我需要找到一个特定数字的所有元组。说1 我怎么做? 问题答案: 如果只希望第一个数字匹配,则可以这样操作: 如果您仅搜索其中包含1的元组: