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

pandas唯一值多列

柯鸿云
2023-03-14
问题内容

df = pd.DataFrame({‘Col1’: [‘Bob’, ‘Joe’, ‘Bill’, ‘Mary’, ‘Joe’],
‘Col2’: [‘Joe’, ‘Steve’, ‘Bob’, ‘Bob’, ‘Steve’],
‘Col3’: np.random.random(5)})

返回“ Col1”和“ Col2”的唯一值的最佳方法是什么?

所需的输出是

'Bob', 'Joe', 'Bill', 'Mary', 'Steve'

问题答案:

pd.unique 从输入数组或DataFrame列或索引返回唯一值。

此函数的输入必须是一维的,因此将需要合并多列。最简单的方法是选择所需的列,然后在展平的NumPy数组中查看值。整个操作如下所示:

>>> pd.unique(df[['Col1', 'Col2']].values.ravel('K'))
array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)

请注意,这ravel()是一个返回多维数组视图(如果可能)的数组方法。该参数'K'告诉方法按元素在内存中存储的顺序展平数组(熊猫通常以Fortran连续的顺序]存储基础数组;列在行之前)。这比使用该方法的默认“C”顺序要快得多。

另一种方法是选择列并将其传递给np.unique

>>> np.unique(df[['Col1', 'Col2']].values)
array(['Bill', 'Bob', 'Joe', 'Mary', 'Steve'], dtype=object)

ravel()由于该方法可以处理多维数组,因此在此无需使用。即使这样,它也可能比pd.unique使用基于排序的算法而不是哈希表来标识唯一值的方法要慢。

对于较大的DataFrame,速度上的差异非常大(尤其是在只有少数唯一值的情况下):

>>> df1 = pd.concat([df]*100000, ignore_index=True) # DataFrame with 500000 rows
>>> %timeit np.unique(df1[['Col1', 'Col2']].values)
1 loop, best of 3: 1.12 s per loop

>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel('K'))
10 loops, best of 3: 38.9 ms per loop

>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel()) # ravel using C order
10 loops, best of 3: 49.9 ms per loop


 类似资料:
  • 问题内容: 我需要在每笔 数据中都计算唯一值 我尝试 但是我想得到 问题答案: 您需要: 如果需要字符: 或正如乔恩所说: 您可以像这样保留列名: 区别在于返回一个Series并返回一个DataFrame。

  • 问题内容: 我有以下形式的数据: 组内的非空值始终相同。我想对每个组(如果存在)的非空值进行一次计数,然后找到每个值的总数。 我目前正在以以下方式(笨拙和低效)进行此操作: 我敢肯定,有一种方法可以更干净地执行此操作,而无需使用循环,但是我似乎无法解决问题。任何帮助将非常感激。 问题答案: 我认为您可以使用: 的另一种解决方案,然后创建new by ,将其重塑为by和last :

  • 问题内容: 我正在尝试查询“标签”列中的所有唯一值。标签列中的每一行都可以包含多个值。因此,在不被迫进行规范化的情况下,如何查询多值列? 示例行: 问题答案: 如果最大元素数量是可预测的,则可以使用此方法(请注意,您需要使用,而不是) 看起来有些笨拙,但应该可以完成工作。未经测试,因此,在值之前或之后可能会出现一个逗号逗号

  • 我是一个新的Python学习者,我不知道该怎么做。 假设我有一个这样的数据框: 我只想为每个标题选择行,查看的小时数最多,结果如下: 提前感谢您。

  • 问题内容: 如果我有这样的表: 我可以在Qlik中提出5个唯一的hID。我该如何在Python中使用Pandas数据框?还是一个numpy数组?同样,如果这样做,我将在Qlik中得到8。在大熊猫中做这件事的等效方法是什么? 问题答案: 计算不同的值,使用: 仅计算非空值,请使用: 计算包括空值在内的总值,请使用属性: 使用布尔索引: 或使用: 输出:

  • 问题内容: 我需要一个可以根据键查找值的集合,反之亦然。每个值都有一个键,每个键都有一个值。有没有可以立即使用的数据结构呢? 问题答案: 该BIMAP从谷歌番石榴看起来会适合你。 双向映射(或“双向映射”)是一种保留其值以及其键的唯一性的映射。此约束使bimap可以支持“反向视图”,这是另一个bimap,它包含与此bimap相同的条目,但具有相反的键和值。 或来自Apache Commons Co