我想编写一个 Django 查询来计算表中所有行的平均值。我的模型看起来像
class StatByDow(models.Model):
total_score = models.DecimalField(default=0, max_digits=12, decimal_places=2)
num_articles = models.IntegerField(default=0)
day_of_week = IntegerField(
null=True,
validators=[
MaxValueValidator(6),
MinValueValidator(0)
]
)
Run Code Online (Sandbox Code Playgroud)
我尝试像这样计算平均值
everything_avg = StatByDow.objects.all().aggregate(Avg(Func(F('total_score') / F('num_articles'))))
Run Code Online (Sandbox Code Playgroud)
但这会导致错误
File "/Users/davea/Documents/workspace/mainsite_project/venv/lib/python3.7/site-packages/django/db/models/query.py", line 362, in aggregate
raise TypeError("Complex aggregates require an alias")
TypeError: Complex aggregates require an alias
Run Code Online (Sandbox Code Playgroud)
计算平均值的正确方法是什么?
我看过一些类似的帖子,请求建议以从查询中获得不同的结果。这可以通过子查询来解决,但我聚合的列image_name是唯一的image_name VARCHAR(40) NOT NULL UNIQUE。我认为这没有必要。
这是spot_images表中的数据
spotdk=# select * from spot_images;
id | user_id | spot_id | image_name
----+---------+---------+--------------------------------------
1 | 1 | 1 | 81198013-e8f8-4baa-aece-6fbda15a0498
2 | 1 | 1 | 21b78e4e-f2e4-4d66-961f-83e5c28d69c5
3 | 1 | 1 | 59834585-8c49-4cdf-95e4-38c437acb3c1
4 | 1 | 1 | 0a42c962-2445-4b3b-97a6-325d344fda4a
(4 rows)
Run Code Online (Sandbox Code Playgroud)
spotdk=# select * from spot_images;
id | user_id | spot_id | image_name
----+---------+---------+--------------------------------------
1 | 1 | 1 | 81198013-e8f8-4baa-aece-6fbda15a0498
2 | 1 | 1 | 21b78e4e-f2e4-4d66-961f-83e5c28d69c5 …Run Code Online (Sandbox Code Playgroud) 我有一个 8784 x 13 的 DF (df2),看起来像这样,其中有一个 yyyy-mm-dd 格式的“日期”列和一个以小时为单位的“时间”列,如下所示,我需要计算每日和每月的平均值2016 年:
DATE TIME BAFFIN BAY GATUN II GATUN I KLONDIKE IIIG \
8759 2016-01-01 0000 8.112838 3.949518 3.291540 7.629178
8760 2016-01-01 0100 7.977169 4.028678 3.097562 7.477159
KLONDIKE II LAGOA II LAGOA I PENASCAL II PENASCAL I SABINA \
8759 7.095450 NaN NaN 8.250527 8.911508 3.835205
8760 7.362562 NaN NaN 7.877099 7.858908 3.766714
SIERRA QUEMADA
8759 3.405049
8760 4.386598
Run Code Online (Sandbox Code Playgroud)
我尝试将“DATE”列转换为日期时间以使用 groupby,但我不确定如何执行此操作。我已尝试以下操作,但当我在 Excel 中测试计算时,它没有按日或月平均预期对数据进行分组:
davg_df2 = df2.groupby(by=df2['DATE'].dt.date).mean() #
davg_df2m = df2.groupby(by=df2['DATE'].dt.month).mean() #
Run Code Online (Sandbox Code Playgroud)
谢谢你,因为我仍在学习 …
假设我有以下 df:
col1|col2|col3
1 | 3 | 1
2 | 2 | 1
Run Code Online (Sandbox Code Playgroud)
我想要行的值的比例,所以 stg 像这样:
col1|col2|col3
0.2| 0.6| 0.2
0.4| 0.4| 0.4
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的主要问题是如何获取行的总和:
mydf["col1_proportion"] = mydf["col1"].apply(lambda x: x / (XXX) )
Run Code Online (Sandbox Code Playgroud)
其中 (XXX) 应该是给定行的总和
我有 4 个相同长度的列表,希望对列表中的每个第 n 个元素进行平均,并根据这些平均值创建一个新列表。举个例子:
y1 = [1, 2, 2, 4, 5]
y2 = [3, 6, 9, 12, 0]
y3 = [2, 3, 4, 5, 6]
y4 = [2, 1, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
预期结果应该是:
y1234 = [2, 3, 5, 7, 5]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
嗨我在matlab中有一个单元格数组,其中单元格的长度不同.我如何确定细胞的平均长度.
我试过了:
mean(length(mycell{:});
Run Code Online (Sandbox Code Playgroud)
但这对于平均功能来说输入太多了.
谢谢.
我想得到每个学生的平均资格.
例如,有30名学生拥有:
Pupil 1: Qualification 1: 5,6 Qualification 2: 3,2 Qualification 3: 9,1
Pupil 2: Qualification 1: 5,1 Qualification 2: 8,6 Qualification 3: 3,1
Pupil 3: Qualification 1: 1,9 Qualification 2: 7,2 Qualification 3: 5,1
Pupil 4: Qualification 1: 4,6 Qualification 2: 5,2 Qualification 3: 9,5
Run Code Online (Sandbox Code Playgroud)
等等...
我想得到:

我试过:
select distinct pupils.name, pupils.surname, qualifications.id_trimester, round(avg(qualifications.qualification),2), count(qualifications.qualification) from pupils, qualifications where pupils.level='1' and pupils.class='A' and qualifications.id_trimester=1 and qualifications.type_qualification='class' group by pupils.surname.
Run Code Online (Sandbox Code Playgroud)
但它显示了所有行的相同平均资格和计数.它显示了所有行中重复的第一个学生的平均资格...
表格是:
pupils:
id_pupil
name
surname
email
user
pass
level …Run Code Online (Sandbox Code Playgroud) 我有以下字典:
StudentGrades = {
'Ivan': [4.32, 3, 2],
'Martin': [3.45, 5, 6],
'Stoyan': [2, 5.67, 4],
'Vladimir': [5.63, 4.67, 6]
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数来打印学生成绩的平均值,即值的平均值,但我不知道如何.你能帮我吗?
我正在尝试创建一个函数,它将给定列表中的所有数字相加,然后将其除以6.
average :: [Integer] -> Integer
average m = (sum m) quot 6
Run Code Online (Sandbox Code Playgroud)
但这是我收到的错误消息:
Couldn't match type `Integer'
with `(a0 -> a0 -> a0) -> a1 -> Integer'
Expected type: [(a0 -> a0 -> a0) -> a1 -> Integer]
Actual type: [Integer]
In the first argument of `sum', namely `m'
In the expression: (sum m) quot 6
Run Code Online (Sandbox Code Playgroud) 我试图使用Java 8从Map获取平均值,但是我没有获取值本身,而是想获得Map.Entry.
double average = totals.entrySet()
.stream()
.mapToDouble(i -> i.getValue())
.average()
.orElse(0); //Want to get Map.Entry instead
Run Code Online (Sandbox Code Playgroud)