相关疑难解决方法(0)

如何按键访问pandas groupby dataframe

如何通过密钥访问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)

python group-by dataframe pandas pandas-groupby

134
推荐指数
5
解决办法
16万
查看次数

Pandas groupby与冗余nan的类别

我在使用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)

python group-by numpy pandas pandas-groupby

18
推荐指数
3
解决办法
5601
查看次数

标签 统计

group-by ×2

pandas ×2

pandas-groupby ×2

python ×2

dataframe ×1

numpy ×1