小编use*_*459的帖子

groupby上的pandas concat数组

我有一个由group by创建的DataFrame:

agg_df = df.groupby(['X', 'Y', 'Z']).agg({
    'amount':np.sum,
    'ID': pd.Series.unique,
})
Run Code Online (Sandbox Code Playgroud)

在我应用了一些过滤之后,agg_df我想要连接ID

agg_df = agg_df.groupby(['X', 'Y']).agg({ # Z is not in in groupby now
    'amount':np.sum,
    'ID': pd.Series.unique,
})
Run Code Online (Sandbox Code Playgroud)

但是我在第二个时遇到错误'ID': pd.Series.unique:

ValueError: Function does not reduce
Run Code Online (Sandbox Code Playgroud)

作为示例,第二组之前的数据帧是:

               |amount|  ID   |
-----+----+----+------+-------+
  X  | Y  | Z  |      |       |
-----+----+----+------+-------+
  a1 | b1 | c1 |  10  | 2     |
     |    | c2 |  11  | 1     |
  a3 | b2 | c3 |   2  | [5,7] …
Run Code Online (Sandbox Code Playgroud)

python pandas

10
推荐指数
1
解决办法
1574
查看次数

如何为具有 TaggableManager 字段的模型创建 Factory-Boy 工厂

如何从 django-taggit 在 Factory-Boy 到 TaggableManager 中创建一个字段?

以下不起作用:

第一的:

class ExperimentFactory(factory.DjangoModelFactory):
    class Meta:
        model = Experiment
        django_get_or_create = ('owner', 'name', 'start_date', 'stop_date', )

    owner = factory.SubFactory(UserFactory)
    name = factory.Sequence(lambda n : 'Experiment %s' % n)

    start_date = fuzzy.FuzzyDate(start_date=datetime.date(2003, 2, 1), 
                                     end_date = datetime.date.today() + timedelta(days=4*52*7+5))

    tags = [u'abc, cde', u'xzy']
Run Code Online (Sandbox Code Playgroud)

错误是: TypeError: 'tags' 是该函数的无效关键字参数

第二:(与factory.post_generation)。所以最后一行不是

@factory.post_generation
def post_tags(self, create, extracted, **kwargs):
    self.tags = [u'abc, cde', u'xzy']
    # self.save() # This does not have any effects
Run Code Online (Sandbox Code Playgroud)

我得到的结果Experiment.objects.get(pk=1).tags是 …

django django-taggit factory-boy

3
推荐指数
1
解决办法
2015
查看次数

如何在Django中适当地测试ModelForms和视图

是否需要为以下内容创建测试ModelForm?原因是实际上没有代码.

class HouseForm(forms.ModelForm):
    class Meta:
        model = House
        exclude = ['user',]
        fields = ['area', 'num_floors',]
Run Code Online (Sandbox Code Playgroud)

所以测试的唯一部分就是检查excludeinclude字段是否没有公共字段.还要测试它,excludeinclude确实拥有模型的所有字段,而不是更多.

是否有意义?

另一方面,我想为以下视图编写单元测试.它利用上面的ModelForm.

是否有可能在不使用Selenium等某些工具的情况下编写真正的单元测试?关键是我不知道如何在视图上传递一些字段值.

@login_required
def update_or_create_house(request, house_id=None):

    if house_id:
        house = request.user.house_set.get(pk=house_id)
    else:
        house = None

    if request.method=="POST":
        form = HouseForm(request.POST, instance=house)
        if form.is_valid():
            result = form.save(commit=False)
            result.user = request.user
            result.save()

            return redirect('houses-viewall')
        else:
            print form.errors
    else:
        form = HouseForm(instance=house)

    return render(request, 'housemgm/edit_house.html', {'form':form, 'house':house,})
Run Code Online (Sandbox Code Playgroud)

最后一个问题:在同一视图中编辑和创建功能是一个好的设计吗?或者我应该将它们分成两部分?

只是为了完整性,模型是

class House(models.Model):
    area = models.FloatField()
    owner = …
Run Code Online (Sandbox Code Playgroud)

django unit-testing

2
推荐指数
1
解决办法
1191
查看次数