グループ番号を持つ配列を作成する効率的なオールパンダの方法を探しています(元のデータフレームのすべての行について、この行がどのグループに属しているかを示す番号が必要です):
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 を超えることです。これは私が期待する以上のものです。