将列表中的季度数据添加到年度中



我有一个包含季度数据的数据集。

示例:〔2019,1,10,20,5〕,

[2019, 10, 56, 34],
[2019, 74, 66 ,32],
[2019, 20, 96, 31],
[2018, 13, 16, 35],
.....

我想总结和计算平均值,找到每年的最大值和最小值(取决于列(,并将结果添加到新列表中。列1->平均值,第2列,查找最大值,第3列查找最小值;

[2019, 26.25,  96, 31]
[2018 .....]
...

我不知道如何解决这个问题,我不能使用pandas或numpy

创建year: [list, number of quartals]形式的dictd = {}

迭代原始列表

for yr, x,y,z in data: 
if yr not in d:
d[yr] = [[yr, x, y, z], 1]
# now make changes
else:
a = d[yr]
e, n = a
e[1] += x
e[2] = max(e[2], y)
e[3] = min(e[3], z)
a[1] += 1

现在再次迭代d,将e[1] / a[1]除以平均值
,并将e放入结果列表中

您可以执行以下操作-

方法1:使用PANDAS

#Mention all the columns and respective aggregations as key, value for a dict
g = {'var2':'mean', 'var3':'max', 'var4':'min'}

#Apply groupby with agg() using the above dict
df.groupby(['var1']).agg(g).reset_index()

只需将var1var2var3var4替换为代码中的实际变量名即可。

var1       var2  var3  var4
0  2018  13.000000    16    35
1  2019  34.666667    96    31

编辑:如果你不应该使用任何panda或numpy,那么我必须假设你的数据集实际上是一个列表列表,而不是panda数据帧,否则会破坏目的。在这种情况下,你可以使用列表理解以以下方式解决这个问题-

方法2:使用列表理解

data = [[2019, 10, 56, 34],[2019, 74, 66 ,32],[2019, 20, 96, 31],[2018, 13, 16, 35], [2018, 14, 27, 33]]
#function to calculate average on a list
def average(lst): 
return sum(lst) / len(lst)
#get set list of years
unique_years = set([i[0] for i in data])
[[[j[0] for j in data if j[0]==i][0],
average([j[1] for j in data if j[0]==i]),
max([j[2] for j in data if j[0]==i]),
min([j[3] for j in data if j[0]==i])] for i in unique_years]
#output: [[2018, 13.5, 27, 33], [2019, 34.666666666666664, 96, 31]]

如果您对列表理解不满意,也可以使用显式for循环-

方法3:使用显式FOR-IF

yr = []
v1 = []
v2 = []
v3 = []
#function to calculate average on a list
def average(lst): 
return sum(lst) / len(lst)
#get set list of years
unique_years = set([i[0] for i in data])
for i in unique_years:
for j in data:
if j[0]==i:
v1.append(j[1])
v2.append(j[2])
v3.append(j[3])
yr.append([i,average(v1),max(v2), min(v3)])

print(yr)
#output: [[2018, 13.5, 27, 33], [2019, 26.2, 96, 31]]

最新更新