我有一个大约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数组。
答案 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'])