如何通过密钥访问groupby对象中的相应groupby数据帧?使用以下groupby:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
'B': rand.randn(6),
'C': rand.randint(0, 20, 6)})
gb = df.groupby(['A'])
Run Code Online (Sandbox Code Playgroud)
我可以遍历它以获取密钥和组:
In [11]: for k, gp in gb:
print 'key=' + str(k)
print gp
key=bar
A B C
1 bar -0.611756 18
3 bar -1.072969 10
5 bar -2.301539 18
key=foo
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
Run Code Online (Sandbox Code Playgroud)
我希望能够做类似的事情
In [12]: gb['foo']
Out[12]:
A B C
0 foo 1.624345 5
2 foo …Run Code Online (Sandbox Code Playgroud) 我在使用pandas groupby和分类数据时遇到了问题.从理论上讲,它应该是超级高效的:您通过整数而不是字符串进行分组和索引.但它坚持认为,在按多个类别进行分组时,必须考虑每个类别组合.
即使普通字符串密度较低,我有时也会使用类别,因为这些字符串很长并且可以节省内存/提高性能.有时每列中有数千个类别.按3列分组时,pandas强制我们保留1000 ^ 3组的结果.
我的问题:有没有一种方便的方法来使用groupby类别,同时避免这种不愉快的行为?我不是在寻找任何这些解决方案:
numpy.groupby,稍后再恢复为类别.我希望有一种方法可以修改这个特殊的pandas特质.一个简单的例子如下.而不是输出中我想要的4个类别,我最终得到12个.
import pandas as pd
group_cols = ['Group1', 'Group2', 'Group3']
df = pd.DataFrame([['A', 'B', 'C', 54.34],
['A', 'B', 'D', 61.34],
['B', 'A', 'C', 514.5],
['B', 'A', 'A', 765.4],
['A', 'B', 'D', 765.4]],
columns=(group_cols+['Value']))
for col in group_cols:
df[col] = df[col].astype('category')
df.groupby(group_cols, as_index=False).sum()
Group1 Group2 Group3 Value
# A A A NaN
# A A C NaN
# …Run Code Online (Sandbox Code Playgroud)