在pandas中有类似GroupBy.get_group的东西,但有一个可选的默认值?

Zac*_*iel 12 python pandas

我有一个DataFrame df,我已经用它了.我正在寻找一个类似于get_group(name)的函数,除了如果名称不存在而不是抛出KeyError,返回一个空的DataFrame(或其他一些值),类似于dict.get的工作方式:

g = df.groupby('x')

# doesn't work, but would be nice:
i = g.get_group(1, default=[])

# does work, but is hard to read:
i = g.obj.take(g.indices.get(1, []), g.axis)
Run Code Online (Sandbox Code Playgroud)

是否已有提供此功能的功能?

编辑:

在很多方面,GroupBy对象由一个dict(.indicies,.groups)表示,这个'get with default'功能足以构成一个dict的概念,它包含在Python语言本身中.似乎如果一个类似dict的东西没有默认的get,也许我不能正确理解它?为什么像这样的dict没有"默认获得"?

我想做的缩写示例是:

df1_bymid = df1.groupby('mid')
df2_bymid = df2.groupby('mid')

for mid in set(df1_bymid.groups) | set(df2_bymid.groups) :
    rows1 = df1_bymid.get_group(mid, [])
    rows2 = df1_bymid.get_group(mid, [])
    for row1, row2 in itertools.product(rows1, rows2) :
        yield row1, row2
Run Code Online (Sandbox Code Playgroud)

当然我可以创建一个函数,我可能,似乎如果我必须走得太远,也许我没有按照预期的方式使用GroupBy对象:

def get_group(df, name, obj=None, default=None) :
    if obj is None :
        obj = df.obj

    try :
        inds = df.indices[name]
    except KeyError, e :
        if default is None :
            raise e

        inds = default

    return df.obj.take(inds, df.axis)
Run Code Online (Sandbox Code Playgroud)

wai*_*kuo 6

我可能会定义我自己get_group()如下

In [55]: def get_group(g, key):
   ....:     if key in g.groups: return g.get_group(key)
   ....:     return pd.DataFrame()
   ....: 

In [52]: get_group(g, 's1')
Out[52]: 
   Mt Sp  Value  count
0  s1  a      1      3
1  s1  b      2      2

In [54]: get_group(g, 's4')
Out[54]: 
Empty DataFrame
Columns: []
Index: []   
Run Code Online (Sandbox Code Playgroud)