我有一个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)
我可能会定义我自己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)