滤波大熊猫数据帧的方法我有100万行和分类列非常大的数据帧。我想知道是否有比使用.isin()
方法或.join()
方法here更快地选择按类别排列的行。最快通过
鉴于该数据已经分类,我认为这应该是非常快的,选择类别,但几个测试我跑了令人失望的表现。我发现的唯一的其他解决方案是从here,但解决方案似乎不适用于熊猫0.20.2。
下面是一个例子的数据集。
import pandas as pd
import random
import string
df = pd.DataFrame({'categories': [random.choice(string.ascii_letters)
for _ in range(1000000)]*100,
'values': [random.choice([0,1])
for _ in range(1000000)]*100})
df['categories'] = df['categories'].astype('category')
测试与.isin()
:
%timeit df[df['categories'].isin(list(string.ascii_lowercase))]
44 s ± 894 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
使用.join()
:
%timeit df.set_index('categories').join(
pd.Series(index=list(string.ascii_lowercase), name='temp'),
how='inner').rename_axis('categories').reset_index().drop('temp', 1)
24.7 s ± 1.69 s per loop (mean ± std. dev. of 7 runs, 1 loop each)
只是一个供参考,而定时为*高*此处的随机种子depedent。你应该修复你的问题。 – Jeff
经过几次更多的测试后,每种方法使用相同的随机种子并使用我的真实数据进行测试,我发现'map'方法始终更快,所以我将其标记为解决方案。 – kayoz