我是熊猫的新手,所以如果答案很明显,我会提前道歉,但是我找不到关于该主题的任何答案。 我有一组大约200万行的数据,我试图按一个列分组并创建唯一列表作为其他两列的聚合值:
keys = # list of keys from an s3 paginator
dfs = []
for key in keys:
print(key)
match = re.search('^[\d]{4}-[\d]{2}-[\d]{2}/(.*)/(.*)_batch_request.csv$', key, re.IGNORECASE)
df = pd.read_csv('s3://{}/{}'.format(bucket, key), names = ['id'])
df['environment']=match.group(1)
df['request_id']=match.group(2)
dfs.append(df)
all = pd.concat(dfs).reset_index()
all.groupby('id').agg({'environment': 'unique', 'request_id': 'unique'})
最后一行将原始集减少到大约30万行,这需要几分钟。分组所需的时间似乎与帧的初始大小没有直接关系,因为尝试使用较小的输入会产生非常相似的结果。
也许我弄错了,但是我期望具有4Gb RAM的i7的性能要快得多。如果我仅使用nunique
而不是unique
来计算唯一元素,那么它将运行约15秒。
我做错了还是这是预期的性能?
谢谢