小编gal*_*den的帖子

从 Pandas 数据框中获取最后一个条目的最佳方法

我最近不得不获取某些项目的最后设置状态,并标有 ID。我找到了这个答案:Python:如何获得具有它们所属组最大值的行?

令我惊讶的是,在只有 ~2e6 行的数据集上它相当慢。但是我不需要获取所有最大值,只需要获取最后一个。

import numpy as np
import pandas as pd

df = pd.DataFrame({
    "id": np.random.randint(1, 1000, size=5000),
    "status": np.random.randint(1, 10, size=5000),
    "date": [
        time.strftime("%Y-%m-%d", time.localtime(time.time() - x))
        for x in np.random.randint(-5e7, 5e7, size=5000)
    ],
})

%timeit df.groupby('id').apply(lambda t: t[t.date==t.date.max()])
1 loops, best of 3: 576 ms per loop

%timeit df.reindex(df.sort_values(["date"], ascending=False)["id"].drop_duplicates().index)
100 loops, best of 3: 4.82 ms per loop
Run Code Online (Sandbox Code Playgroud)

第一个是我在链接中找到的解决方案,这似乎是一种允许更复杂操作的方法。

但是,对于我的问题,我可以对重复项进行排序和删除并重新编制索引,这会表现得更好。尤其是在更大的数据集上,这真的很重要。

我的问题:还有其他方法可以实现我想做的事情吗?可能有更好的性能?

python numpy pandas

5
推荐指数
1
解决办法
839
查看次数

conda 配置更改默认 env 目录

conda create -n EvnName python=3.6 继续在用户主目录中安装我的 Env 而不是我的 Anaconda 安装 /data/anaconda3/envs 的 env 目录

conda 信息给了我

Current conda install:

           platform : linux-64
      conda version : 4.3.30
   conda is private : False
  conda-env version : 4.3.30
conda-build version : not installed
     python version : 3.6.1.final.0
   requests version : 2.14.2
   root environment : /data/anaconda3  (read only)
default environment : /data/anaconda3
   envs directories : /data/anaconda3/envs
                      /home/tlinden/.conda/envs
      package cache : /data/anaconda3/pkgs
                      /home/tlinden/.conda/pkgs
       channel URLs : https://repo.continuum.io/pkgs/main/linux-64
                      https://repo.continuum.io/pkgs/main/noarch
                      https://repo.continuum.io/pkgs/free/linux-64
                      https://repo.continuum.io/pkgs/free/noarch
                      https://repo.continuum.io/pkgs/r/linux-64
                      https://repo.continuum.io/pkgs/r/noarch
                      https://repo.continuum.io/pkgs/pro/linux-64
                      https://repo.continuum.io/pkgs/pro/noarch
        config …
Run Code Online (Sandbox Code Playgroud)

conda

5
推荐指数
1
解决办法
4442
查看次数

如何从 pyarrow 或 pandas 加载 modin 数据帧

由于 Modin 不支持从 s3 上的多个 pyarrow 文件加载,因此我使用 pyarrow 加载数据。


    import s3fs
    import modin.pandas as pd
    from pyarrow import parquet
    
    s3 = s3fs.S3FileSystem(
        key=aws_key,
        secret=aws_secret
    )

    table = parquet.ParquetDataset(
        path_or_paths="s3://bucket/path", 
        filesystem=s3,
    ).read(
        columns=["hotelId", "startDate", "endDate"]
    )

    # to get a pandas df the next step would be table.to_pandas()

Run Code Online (Sandbox Code Playgroud)

如果我知道想要将数据放入 Modin df 中进行并行计算,而不必写入 csv 或从 csv 中读取数据?有没有办法直接从 pyarrow.Table 或至少从 pandas 数据帧构建 Modin df ?

pyarrow modin

5
推荐指数
1
解决办法
968
查看次数

标签 统计

conda ×1

modin ×1

numpy ×1

pandas ×1

pyarrow ×1

python ×1