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

时间:2018-06-14 14:34:35

标签: python python-3.x pandas csv processing-efficiency

我有一个大约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数组。

2 个答案:

答案 0 :(得分:4)

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

group_names = df.col1.unique()

答案 1 :(得分:4)

groupby个对象具有.groups属性:

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

这将返回组名称 - >标签

的字典

示例:

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'])