我有一个庞大的Pandas数据帧(200,000个条目和16列)。我想按colour
和code
对所有索引进行分组。重要的是,我想
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
但是,我根本不想存储code
或colour
列。换句话说,我希望gb_dict['one','white']
单独返回[1,6]
。我怎样才能做到这一点?
另外,我觉得手动定义df_reduced
是不必要的,当然我应该能够更优雅地限制我想要包含在groupby()
中的列?这样做的最佳方式是什么?
答案 0 :(得分:2)
你想要小组dict吗?
>>> groups = df.groupby(['code','colour']).groups
>>> groups['one','white']
[1L, 6L]