小编Zac*_*iel的帖子

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

我有一个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 = …
Run Code Online (Sandbox Code Playgroud)

python pandas

12
推荐指数
1
解决办法
5466
查看次数

除了Python中迭代器的最后N个元素之外的所有元素

在Python中获取迭代器的最后N个元素的最佳方法是什么?以下是理论行动中的一个例子:

>>> list(all_but_the_last_n(range(10), 0))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(all_but_the_last_n(range(10), 2))
[0, 1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

python iterator

6
推荐指数
2
解决办法
2534
查看次数

如何计算Theano中的GPU内存使用情况?

我正在尝试不同的Theano模型,并使用不断增加的序列长度的课程.为了填充GPU的内存,我怎样才能提前预测任何给定序列长度和模型的批量大小有多大?

更糟糕的是,如果我不小心使用了太多内存,我会得到一个MemoryError并且GPU上的内存没有释放,要求我重新启动进程以释放内存,并在尝试新批量之前丢失网络.由于此错误无法恢复,因此很难在异常之前增加批量大小,然后再向下调整.

python memory-management gpgpu machine-learning theano

6
推荐指数
1
解决办法
2292
查看次数

测试python函数的非确定性行为

我们有一个庞大而复杂的功能,需要具有确定性.它是我们公司的主力之一,涵盖了大量的代码.由于python的dict迭代器,这段代码经常变得不确定.这已经发生了很多次,并且很难追踪,并且通常不会立即注意到.我们想编写一个自动测试来检测非确定性,但我不知道该怎么做.

我们已经尝试在循环中运行函数,并且测试结果总是相同的,但有时,即使函数是非确定性的,函数也会通​​过此测试,因为dict迭代器的任意但有些一致的排序.

有没有办法编写自动化测试来捕获这种bug?

也许有一种方法来破解python的dict,以便迭代器在这个测试中是随机的而不是随意的?那样重复调用函数会更容易发生分歧吗?这似乎是一个相当复杂的方法,但我想不出任何其他方式.

编辑:

我们目前正在使用Python 2.7.

我们对各个子模块进行了单元测试,但由于字典顺序的任意但一致的性质,它们通常不会暴露非确定性.

此外,也许非确定性不是描述这个问题的正确方法.这个函数接受{id:data},但是id的值不应该影响代码的结果,但是由于python dict的排序,它有时会这样做.也许测试这个的最好方法是用随机值替换id,并检查在使用不同id的多次运行后输出是否相同.

python iteration dictionary non-deterministic

4
推荐指数
1
解决办法
908
查看次数