我有一个pandas.Series包含整数,但我需要将这些转换为字符串以用于某些下游工具.所以假设我有一个Series对象:
import numpy as np
import pandas as pd
x = pd.Series(np.random.randint(0, 100, 1000000))
Run Code Online (Sandbox Code Playgroud)
在StackOverflow和其他网站上,我见过大多数人认为最好的方法是:
%% timeit
x = x.astype(str)
Run Code Online (Sandbox Code Playgroud)
这大约需要2秒钟.
使用时x = x.apply(str),只需0.2秒.
为什么x.astype(str)这么慢?应该推荐的方式x.apply(str)吗?
我主要对python 3的行为感兴趣.
我正在为每个组选择一个最大行,并且我使用groupby/ agg来返回索引值并使用选择行loc.
例如,要分组"Id"依次选择具有最高"delta"值的行:
selected_idx = df.groupby("Id").apply(lambda df: df.delta.argmax())
selected_rows = df.loc[selected_idx, :]
Run Code Online (Sandbox Code Playgroud)
但是,这种方式很慢.实际上,当我在1300万行上使用此查询时,我的i7/16G RAM笔记本电脑挂起.
我有两个专家问题:
[更新]非常感谢@unutbu的分析!
sort_drop它是!在我的i7/32GRAM机器上,groupby + idxmax挂起了近14个小时(永远不会返回一个东西)然而sort_drop处理它只需要一分钟!
我仍然需要看看pandas如何实现每个方法,但问题现在解决了!我喜欢StackOverflow.
python performance greatest-n-per-group pandas pandas-groupby