我有一个由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) 如何从 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是 …
是否需要为以下内容创建测试ModelForm?原因是实际上没有代码.
class HouseForm(forms.ModelForm):
class Meta:
model = House
exclude = ['user',]
fields = ['area', 'num_floors',]
Run Code Online (Sandbox Code Playgroud)
所以测试的唯一部分就是检查exclude和include字段是否没有公共字段.还要测试它,exclude并include确实拥有模型的所有字段,而不是更多.
是否有意义?
另一方面,我想为以下视图编写单元测试.它利用上面的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)