在熊猫中获取组名的有效方法

swo*_*nep 2 python csv processing-efficiency python-3.x 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)
Run Code Online (Sandbox Code Playgroud)

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

sac*_*cuL 7

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

group_names = df.col1.unique()
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 6

groupby对象具有.groups属性:

groups = df.groupby('col1').groups
Run Code Online (Sandbox Code Playgroud)

这将返回组名称->标签的字典

例:

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'])
Run Code Online (Sandbox Code Playgroud)