2

グループ番号を持つ配列を作成する効率的なオールパンダの方法を探しています(元のデータフレームのすべての行について、この行がどのグループに属しているかを示す番号が必要です):

df = pandas.DataFrame({'a': [1, 1, 1, 2, 2, 2], 'b': [1, 2, 1, 1, 2, 1]})
groups = df.groupby(['a', 'b'])
group_names = sorted(groups.groups.keys())
group_indices = np.array(df.index)
for index, group in enumerate(group_names):
    group_indices[groups.indices[group]] = index

どこ

In : df 
Out]:
   a  b
0  1  1
1  1  2
2  1  1
3  2  1
4  2  2
5  2  1    

In : groups.indices
Out:
{(1, 1): array([0, 2]),
 (1, 2): array([1]),
 (2, 1): array([3, 5]),
 (2, 2): array([4])}

In : group_indices
Out: array([0, 1, 0, 2, 3, 2])

私の問題は、df約 20000x100 (64 ビット浮動小数点数) で、2 つの列でグループ化すると、メモリ使用量が 6 GB を超えることです。これは私が期待する以上のものです。

4

1 に答える 1