【发布时间】:2016-04-08 03:59:45
【问题描述】:
我使用大型数据集,使 pandas 的 group 和 groupby 函数需要很长时间/占用太多内存。我听说有些人说 groupby 可能很慢,但是很难找到更好的解决方案。
如果我的数据框有 2 列类似于:
df = pd.DataFrame({'a':[1,2,2,4], 'b':[1,1,1,1]})
a b
1 1
2 1
2 1
4 1
我希望返回与另一列中的值匹配的值列表:
a b list_of_b
1 1 [1]
2 1 [1,1]
2 1 [1,1]
4 1 [1]
我目前使用:
df_group = df.groupby('a')
df['list_of_b'] = df.apply(lambda row: df_group.get_group(row['a'])['b'].tolist(), axis=1)
上面的代码适用于小东西,但不适用于大型数据帧(df > 1,000,000 行)有没有人有更快的方法来做到这一点?
【问题讨论】:
-
创建值列表是有问题的,因为 pandas 想要将其转换为系列并在索引上对齐,您可以尝试
df['list_of_b'] = df['a'].map(df.groupby('a')['b'].apply(list))以提高速度