Pandas groupby:只存储索引

时间:2014-01-14 15:55:38

标签: python group-by pandas dataframe

我有一个庞大的Pandas数据帧(200,000个条目和16列)。我想按colourcode对所有索引进行分组。重要的是,我想

1)通过在groupby()

期间排除所有不相关的列来最小化计算工作量

2)通过仅存储colour - code对的索引来最小化所需的内存。

示例数据框如下:

import pandas as pd
import numpy as np
df = pd.DataFrame({'id' : range(1,9),
                   'code' : ['one', 'one', 'two', 'three',
                             'two', 'three', 'one', 'two'],
                   'colour': ['black', 'white','white','white',
                           'black', 'black', 'white', 'white'],
                   'irrelevant1': ['foo', 'foo', 'foo','bar','bar',
                                     'foo','bar','bar'],
                   'irrelevant2': ['foo', 'foo', 'foo','bar','bar',
                                     'foo','bar','bar'],
                   'irrelevant3': ['foo', 'foo', 'foo','bar','bar',
                                     'foo','bar','bar'],
                   'amount' : np.random.randn(8)},  columns= ['id','code','colour', 'irrelevant1', 'irrelevant2', 'irrelevant3', 'amount'])

我的尝试:

df_reduced = df[['code','colour']] # I am manually removing the irrelevant columns before performing groupby()
gb = df_reduced.groupby(['code','colour'])
gb_dict = dict(list(gb))
gb_dict['one','white']
  code colour
1  one  white
6  one  white

但是,我根本不想存储codecolour列。换句话说,我希望gb_dict['one','white']单独返回[1,6]。我怎样才能做到这一点?

另外,我觉得手动定义df_reduced是不必要的,当然我应该能够更优雅地限制我想要包含在groupby()中的列?这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

你想要小组dict吗?

>>> groups = df.groupby(['code','colour']).groups
>>> groups['one','white']
[1L, 6L]