【发布时间】:2020-10-12 17:10:12
【问题描述】:
我的数据集有 200 万个观测值。我想根据变量“rv”的值将其分成 200 个类别。例如,假设我有 0-1000、1000-2000、2000-3000、3000-4000、4000-5000 等类别,我想像这样分割一个值为 4500 的观察:前 4 个类别中的每一个类别都有 1000,并且最后一类500。我有以下代码,它可以工作但很慢:
# create random data set
import pandas as pd
import numpy as np
data = np.random.randint(0, 5000, size=2000)
df = pd.DataFrame({'rv': data})
#%% slice
sizes = [0, 1000, 2000, 3000, 4000, 5000]
size_names = ['{:.0f} to {:.0f}'.format(lower, upper) for lower, upper in zip(sizes[0:-1], sizes[1:])]
for lower, upper, name in zip(sizes[0:-1], sizes[1:], size_names):
df[name] = df['rv'].apply(lambda x: max(0, (min(x, upper) - lower)))
# summary table
df_slice = df[size_names].sum()
有没有更好的方法来做到这一点,其中更好意味着更快?有 200 万个观察值和 200 个类别,这需要相当长的时间(不知道我在代码完成之前停止了多长时间)。
【问题讨论】:
-
您能否在处理前对数据进行排序?
-
是的,我可以对数据进行排序。这样会加快速度吗?