在 pandas 中获取组名的有效方法

Efficient way to get group names in pandas

我有一个包含大约 300,000 行的 .csv 文件。我已将其设置为按特定列分组,每个组有大约 140 名成员(总共 2138 个组)。

我正在尝试生成一个 numpy 组名称数组。到目前为止,我已经使用 for 循环来生成名称,但是处理所有内容都需要一段时间。

import numpy as np
import pandas as pd

df = pd.read_csv('file.csv')
grouped = df.groupby('col1')
group_names = []
for name,group in grouped: group_names.append(name)
group_names = np.array(group_names, dtype=object)

我想知道是否有更有效的方法来执行此操作,无论是使用 pandas 模块还是直接将名称转换为 numpy 数组。

最快的方法很可能是在分组依据的列上使用 unique,这会为您提供所有唯一值。输出将是您的组名称数组。

group_names = df.col1.unique()

groupby 对象具有 .groups 属性:

groups = df.groupby('col1').groups

this returns组名的字典->labels

示例:

In[257]:
df = pd.DataFrame({'a':list('aabcccc'), 'b':np.random.randn(7)})
groups = df.groupby('a').groups
groups

Out[257]: 
{'a': Int64Index([0, 1], dtype='int64'),
 'b': Int64Index([2], dtype='int64'),
 'c': Int64Index([3, 4, 5, 6], dtype='int64')}

groups.keys()
Out[258]: dict_keys(['a', 'b', 'c'])