[英]Python: How to count the number of moving average crossovers + highest point between each crossover?
[英](For loops): How to put average values beside each number of the corresponding avg value and print the number(s) with the highest average?
我的代碼:
name = ["AAAAA 4 2 1 2 4 2 4 4 5 2 2 1 5 2 4 3 1 1 3 3 5",
"BBB 5 2 1 2 4 5 4 4 1 2 2 2 4 4 4 3 1 2 3 3 2",
"K 4 1 2 1 2 1 2 5 1 1 1 1 4 2 2 1 5 1 3 4 1"]
count = 0
for line in name:
for char in line:
if char.isdigit():
count += 1
final_count = int(count/len(name)) # 21
# count --->63
# print(len(name))--> 3 which gives the below number,
# print(final_count)--> 21
name = [name[i].split(" ") for i in range(len(name))]
for i in range(1, len(name[0])):
bb = (int(name[0][i])+int(name[1][i])+int(name[2][i]))/len(name)
for i in range(1, final_count+1):
print(i,bb)
輸出:錯!
1 2.6666666666666665
2 2.6666666666666665
3 2.6666666666666665
4 2.6666666666666665
5 2.6666666666666665
6 2.6666666666666665
7 2.6666666666666665
8 2.6666666666666665
9 2.6666666666666665
10 2.6666666666666665
11 2.6666666666666665
12 2.6666666666666665
13 2.6666666666666665
14 2.6666666666666665
15 2.6666666666666665
16 2.6666666666666665
17 2.6666666666666665
18 2.6666666666666665
19 2.6666666666666665
20 2.6666666666666665
21 2.6666666666666665
右側的正確值:
# After changing the line bb = (int(name[0][i])+int(name[1][i])+int(name[2][i]))/len(name)
to
print((int(name[0][i])+int(name[1][i])+int(name[2][i]))/len(name))
4.333333333333333
1.6666666666666667
1.3333333333333333
1.6666666666666667
3.3333333333333335
2.6666666666666665
3.3333333333333335
4.333333333333333
2.3333333333333335
1.6666666666666667
1.6666666666666667
1.3333333333333333
4.333333333333333
2.6666666666666665
3.3333333333333335
2.3333333333333335
2.3333333333333335
1.3333333333333333
3.0
3.3333333333333335
2.6666666666666665
您可以使用statistics.mean
來查找數字的平均值。 並且由於您知道每行具有相同數量的整數,因此使用zip
同時迭代行中的每個數字:
from statistics import mean
name = ["AAAAA 4 2 1 2 4 2 4 4 5 2 2 1 5 2 4 3 1 1 3 3 5",
"BBB 5 2 1 2 4 5 4 4 1 2 2 2 4 4 4 3 1 2 3 3 2",
"K 4 1 2 1 2 1 2 5 1 1 1 1 4 2 2 1 5 1 3 4 1"]
averages = []
for i, nums in enumerate(zip(*map(str.split, name))):
if nums[0].isdigit():
avg = mean(map(int, nums))
print(f'{i} {avg:0.2f}')
averages.append(avg)
highest = ' '.join(str(i) for i, a in enumerate(averages, 1) if a == max(averages))
print(f"the highest average(s) is: #{highest} at {max(averages):0.2f}")
這輸出:
1 4.33
2 1.67
3 1.33
4 1.67
5 3.33
6 2.67
7 3.33
8 4.33
9 2.33
10 1.67
11 1.67
12 1.33
13 4.33
14 2.67
15 3.33
16 2.33
17 2.33
18 1.33
19 3.00
20 3.33
21 2.67
the highest average is: #1 8 13 at 4.33
如果您可以使用熊貓,則可以通過以下方式完成:
import pandas as pd
name=["AAAAA 4 2 1 2 4 2 4 4 5 2 2 1 5 2 4 3 1 1 3 3 5",
"BBB 5 2 1 2 4 5 4 4 1 2 2 2 4 4 4 3 1 2 3 3 2",
"K 4 1 2 1 2 1 2 5 1 1 1 1 4 2 2 1 5 1 3 4 1"]
df = pd.DataFrame()
for item in name:
n = item.split(' ')
thelist = list(map(int, ','.join(n[1:]).split(',')))
df[n[0]] = thelist
df.index+=1
輸出:
df.mean(axis=1).round(2)
Out[142]:
1 4.33
2 1.67
3 1.33
4 1.67
5 3.33
6 2.67
7 3.33
8 4.33
9 2.33
10 1.67
11 1.67
12 1.33
13 4.33
14 2.67
15 3.33
16 2.33
17 2.33
18 1.33
19 3.00
20 3.33
21 2.67
dtype: float64
最高平均值:
max(df.mean(axis=1).round(2))
# 4.33
整個DF:
df['Average Values'] = df.mean(axis=1).round(2)
輸出:
# df
Out[145]:
AAAAA BBB K Average Values
1 4 5 4 4.33
2 2 2 1 1.67
3 1 1 2 1.33
4 2 2 1 1.67
5 4 4 2 3.33
6 2 5 1 2.67
7 4 4 2 3.33
8 4 4 5 4.33
9 5 1 1 2.33
10 2 2 1 1.67
11 2 2 1 1.67
12 1 2 1 1.33
13 5 4 4 4.33
14 2 4 2 2.67
15 4 4 2 3.33
16 3 3 1 2.33
17 1 1 5 2.33
18 1 2 1 1.33
19 3 3 3 3.00
20 3 3 4 3.33
21 5 2 1 2.67
此代碼將提供預期的答案。
import math
name = [
"BBB 5 2 1 2 4 5 4 4 1 2 2 2 4 4 4 3 1 2 3 3 2",
"AAAAA 4 2 1 2 4 2 4 4 5 2 2 1 5 2 4 3 1 1 3 3 5",
"K 4 1 2 1 2 1 2 5 1 1 1 1 4 2 2 1 5 1 3 4"]
count = 0
max = 0
max_index = 0
for index, line in enumerate(name):
local_count = 0
for char in line:
if char.isdigit():
count += 1
local_count += 1
if max < local_count:
max = local_count
max_index = index
final_count = int(count/len(name)) # 21
# count --->63
# print(len(name))--> 3 which gives the below number,
# print(final_count)--> 21
name = [name[i].split(" ") for i in range(len(name))]
index_range = [i for i in range(name.__len__()) if i is not max_index]
max_avg = 0
max_avg_index = []
for i in range(1, len(name[max_index])):
bb = int(name[max_index][i])
local_count = 1
for j in index_range:
if name[j].__len__()>i:
bb = bb + int(name[j][i])
local_count += 1
bb = bb / local_count
if (max_avg < bb):
max_avg = bb
max_avg_index = [i]
elif max_avg == bb:
max_avg_index.append(i)
print(max_avg_index, '%.2f' % max_avg)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.