python - pandas 中大数据统计的最佳方式

标签 python optimization dictionary pandas bigdata

我有一个包含 19,000,000 行的 pandas 数据框。标题是艺术家和周。我想添加另一列,用于计算艺术家在给定一周内出现的次数。现在我正在使用以下代码:

#Function to determine the number
def playsxweek(week,art):
    return len(data[(data.week == week) & (data.artist == art)])
#Then I map
data['playsxweek'] = map(playsxweek,data['week'],data['artist'])

现在,代码需要很长时间才能处理所有 1900 万条记录...有更好的方法吗?

最佳答案

之所以会永远存在,并不是因为它的处理次数是 19,000,000 次,而是因为处理了 3 万亿次

如果有 3 位艺术家和 52 周,那就是 3 x 52 x 19,000,000 或 2,964,000,000。 三万亿次搜索,每一位新艺术家都会增加 988,000,000 次搜索。每个艺术家的搜索量接近一万亿!

相反,迭代一次数据并在遍历时构建计数(此示例假设每行都可以作为字典访问):

playsPerWeek=dict()
for row in data:
    week, artist = row['week'],row['artist']
    playsPerWeek[(week, artist)] = playsPerWeek.get((week, artist),0) + 1

这里我们实例化一个计数,并迭代每行一次。然后我们使用 .get() 来查看 (week,artist) 元组是否作为键存在(如果不使用默认值 0),则添加一个并将其分配到字典中。

仅供引用,由于元组是不可变的,因此它们可以用作字典键,而列表则不能。

关于python - pandas 中大数据统计的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23773785/

相关文章:

python - 将模块转换为字典

python - Numba CUDA `vectorize` 和 `reduce` 装饰器比预期慢

java - 通过删除重复的 BufferedImages/在 Java 中比较 BufferedImages 的快速方法来优化性能

php - 使用 php 和 mysql 为简单论坛设计的高效数据库

javascript - 初始化状态react,解决页面首次渲染时未定义的问题

javascript - d3.js悬停在 map 上不显示文本框,css问题

python - 累积总和和结转 - 用 Pandas 矢量化

python - 如何在没有副作用的情况下 pickle 和解 pickle ?

python , Pandas 。从累积值转换为增量

使用 if 语句提高 PHP 速度