Я работаю над сценарием, чтобы сгруппировать набор запросов Django по полю.
EntryExitLog
модель:
camera = models.ForeignKey(Camera, on_delete=models.CASCADE, null=True, blank=True)
# Person - Will have values for member, and null for non member log
person = models.ForeignKey(Person, on_delete=models.CASCADE, null=True, blank=True)
created_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
entry_time = models.DateTimeField(blank=True, null=True)
exit_time = models.DateTimeField(blank=True, null=True)
Я хочу сгруппировать журналы по created_user
и камере для всех участников и не членов. Я новичок в пандах, сгруппированных со следующим кодом,
import pandas
log_qs = EntryExitLog.objects.filter(Q(entry_time__range=(from_date, to_date)) | \
Q(exit_time__range=(from_date, to_date)))
log_data_dict = {}
for i, log in enumerate(log_qs):
log_data_dict[str(i)] = {}
log_data_dict[str(i)]['company'] = log.camera.user.company.name if log.camera.user.company else None
log_data_dict[str(i)]['name'] = log.created_user.name
log_data_dict[str(i)]['email_id'] = log.created_user.email_id
log_data_dict[str(i)]['camera_name'] = log.camera.nick_name if log.camera.nick_name else None
log_data_dict[str(i)]['camera_id'] = log.camera.camera_id
log_data_dict[str(i)]['person_id'] = log.person.id if log.person else None
data_frame = pandas.DataFrame.from_dict(log_data_dict, orient='index')
print(data_frame.groupby('email_id').groups))
просто интересно получить желаемый результат,
{
'user_email1': {
'camera_name1': {'members': 10, 'non_members': 3, 'total_count': 13},
'camera_name2': {'members': 100, 'non_members': 20, 'total_count': 120}
},
'user_email2': {
'camera_name1': {'members': 150, 'non_members': 30, 'total_count': 180},
'camera_name2': {'members': 190, 'non_members': 10, 'total_count': 200}
}
}