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

使用Python Pandas从数据框中获取总values_count

楚知
2023-03-14
问题内容

我有一个带有几列的Python
pandas数据框。现在,我想将所有值复制到一个列中,以获取一个values_count结果alle值。最后,我需要string1,string2,n的总数。最好的方法是什么?

index row 1    row 2   ...
0     string1  string3
1     string1  string1
2     string2  string2
...

问题答案:

如果性能是一个问题,请尝试:

from collections import Counter

Counter(df.values.ravel())
#Counter({'string1': 3, 'string2': 2, 'string3': 1})

或者stack它变成一个Series再使用value_counts

df.stack().value_counts()
#string1    3
#string2    2
#string3    1
#dtype: int64

对于具有少量列的较大(长)DataFrame,循环可能比堆栈快:

s = pd.Series()
for col in df.columns:
    s = s.add(df[col].value_counts(), fill_value=0)

#string1    3.0
#string2    2.0
#string3    1.0
#dtype: float64

此外,还有一个numpy解决方案:

import numpy as np
np.unique(df.to_numpy(), return_counts=True)

#(array(['string1', 'string2', 'string3'], dtype=object),
# array([3, 2, 1], dtype=int64))
df = pd.DataFrame({'row1': ['string1', 'string1', 'string2'],
                   'row2': ['string3', 'string1', 'string2']})

def vc_from_loop(df):
    s = pd.Series()
    for col in df.columns:
        s = s.add(df[col].value_counts(), fill_value=0)
    return s

DataFrame

%timeit Counter(df.values.ravel())
#11.1 µs ± 56.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit df.stack().value_counts()
#835 µs ± 5.46 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit vc_from_loop(df)
#2.15 ms ± 34.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit np.unique(df.to_numpy(), return_counts=True)
#23.8 µs ± 241 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

DataFrame

df = pd.concat([df]*300000, ignore_index=True)

%timeit Counter(df.values.ravel())
#124 ms ± 1.85 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit df.stack().value_counts()
#337 ms ± 3.59 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit vc_from_loop(df)
#182 ms ± 1.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit np.unique(df.to_numpy(), return_counts=True)
#1.16 s ± 1.09 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


 类似资料:
  • 我正在尝试从数据帧中获取列数据类型 下面是一个示例代码: 上面的代码打印如下图所示:结构类型(列表(结构字段(id,长类型,真),结构字段(文本,字符串类型,真),结构字段(标签,双类型,真)))字段 [结构字段(id,长型,真),结构字段(文本,字符串类型,真),结构字段(标签,双类型,真)]名称 ['id', '文本', 标签'] 但是如何获取标签列的数据类型?非常感谢您的时间。 问候

  • 所以我尝试从pretag获取数据,我设置doc连接到url选择pretag,结果出错了,我需要获取的数据按这里

  • 我正在测试一个基于酒店搜索的场景。所以我做了3个模型类,分别是酒店、房间和可用性 下面是我们正在使用的三个模型类。 Hotel.java @文档(集合="酒店")公共类酒店{ } Room.java @文件(收集=“房间”)公共教室{ } 可利用性Java语言 @文件(收集=“房间”)公共类可用性{ } 这些存储在两个mongodb集合中,一个用于酒店,另一个用于房间和可用性。 下面是我们从中提取

  • 问题内容: 我正在尝试创建一个用于在PHP上执行oracle sql语句的类。 这是我的index.php,我正在尝试调用我的函数 和我的dbcontrol.php用于我的功能 我不确定似乎有什么问题。但是每次我运行这个。页面上未显示任何内容。没有结果,没有数据。但是我确信数据库中有数据。 问题答案: 您总是得到空白页的原因是: oci_num_rows()函数不会返回您可能认为的所选行数。它返回

  • 我想从数据库中获取数据(经度/纬度),并使用Ajax调用将其返回到Google地图上绘制多个标记。 下面是包含ajax的javascript: 在ajax设置中,当我输入“dataType:json”时,函数错误被执行。输出为警报“加载数据时出错”。 这是我的控制器: 我尝试console.log(响应),它显示整个javascript代码。 当前没有“数据类型:'json'”的错误显示“未捕获类

  • 尝试使用Jsoup而不是网站API从网站上练习和获取信息。我的代码没有错误,但文本字段没有更改。它只是给我一个空白。我如何从网站上获取信息?我正试图获取主要新闻,以便在我的网站上发布。 我的代码: