我有一个 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)
是否已经有提供此功能的功能?
编辑:
在许多方面,GroupBy 对象由字典(.indicies、.groups)表示,这种“默认获取”功能对于字典的概念来说已经足够核心,它包含在 Python 语言本身中。似乎如果类似dict的东西没有默认设置,也许我没有正确理解它?为什么像 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
当然,我可以创建一个函数,而且我可能会,似乎如果我不得不走这么远,也许我没有按照预期的方式使用 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)