Python 一个列表中与另一个列表中相同日期对应的项目的平均值
我对计算列表中项目的平均值有点小问题。我希望有人能把我从混乱中解救出来。 我有两个列表A和B,例如Python 一个列表中与另一个列表中相同日期对应的项目的平均值,python,list,Python,List,我对计算列表中项目的平均值有点小问题。我希望有人能把我从混乱中解救出来。 我有两个列表A和B,例如 A = [3,2,1,9,4] B = [1980,1980,1988,1988,2000] 现在我想计算A中与B中日期相同的项目的平均值。 所以最终我会 1980: 2.5 1988: 5 2000: 4 任何帮助都将不胜感激。谢谢一个简单的解决方案是 import numpy as np A = [3,2,1,9,4] B = [1980,1980,1988,1988,2000] a
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
现在我想计算A中与B中日期相同的项目的平均值。
所以最终我会
1980: 2.5
1988: 5
2000: 4
任何帮助都将不胜感激。谢谢一个简单的解决方案是
import numpy as np
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
a = np.array(A)
b = np.array(B)
for year in set(b):
print year, a[b == year].mean()
印刷品
2000 4.0
1988 5.0
1980 2.5
一个重要的解决方案是
import numpy as np
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
a = np.array(A)
b = np.array(B)
for year in set(b):
print year, a[b == year].mean()
印刷品
2000 4.0
1988 5.0
1980 2.5
您可以使用
defaultdict
将每年的值组合在一起,然后对其执行计算,例如:
from collections import defaultdict
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
yearvals = defaultdict(list)
for year, val in zip(B, A):
yearvals[year].append(val)
for year, vals in yearvals.iteritems():
print year, sum(vals, 0.0) / len(vals)
输出:
2000 4.0
1988 5.0
1980 2.5
您可以使用
defaultdict
将每年的值组合在一起,然后对其执行计算,例如:
from collections import defaultdict
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
yearvals = defaultdict(list)
for year, val in zip(B, A):
yearvals[year].append(val)
for year, vals in yearvals.iteritems():
print year, sum(vals, 0.0) / len(vals)
输出:
2000 4.0
1988 5.0
1980 2.5
可以使用引用defaultdict:
from collections import defaultdict
reference_dict = defaultdict(list)
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
for i, year in enumerate(B):
reference_dict[year].append(A[i])
for year, values in reference_dict.iteritems():
print(year, sum(values, 0.0)/len(values))
可以使用引用defaultdict:
from collections import defaultdict
reference_dict = defaultdict(list)
A = [3,2,1,9,4]
B = [1980,1980,1988,1988,2000]
for i, year in enumerate(B):
reference_dict[year].append(A[i])
for year, values in reference_dict.iteritems():
print(year, sum(values, 0.0)/len(values))
使用熊猫:
>>> import pandas as pd
>>> import numpy as np
>>> val_list = np.array([list(pair) for pair in zip(B,A)])
>>> val_list
array([[1980, 3],
[1980, 2],
[1988, 1],
[1988, 9],
[2000, 4]])
>>> df = pd.DataFrame(val_list,columns=['year','value'])
>>> df
year value
0 1980 3
1 1980 2
2 1988 1
3 1988 9
4 2000 4
>>> df.groupby(['year'],as_index=False).mean()
year value
0 1980 2.5
1 1988 5.0
2 2000 4.0
使用熊猫:
>>> import pandas as pd
>>> import numpy as np
>>> val_list = np.array([list(pair) for pair in zip(B,A)])
>>> val_list
array([[1980, 3],
[1980, 2],
[1988, 1],
[1988, 9],
[2000, 4]])
>>> df = pd.DataFrame(val_list,columns=['year','value'])
>>> df
year value
0 1980 3
1 1980 2
2 1988 1
3 1988 9
4 2000 4
>>> df.groupby(['year'],as_index=False).mean()
year value
0 1980 2.5
1 1988 5.0
2 2000 4.0
你能使用外部库吗。如果是这样的话,我建议看看熊猫。您可以创建包含两列[“年”、“值”]的数据框。然后对字段“year”进行分组,并取聚合的平均值()。您可以使用外部库吗。如果是这样的话,我建议看看熊猫。您可以创建包含两列[“年”、“值”]的数据框。然后在字段“year”上做一个groupby,并获取聚合的平均值()。
DataFrame.from_records(zip(a,B)).groupby(1)。mean()
很好:)(例如:这里不需要显式创建np.array
非常正确!我喜欢在回答问题时显式回答,这样读者就能更好地理解。DataFrame.from_records(zip(a,B)).groupby(1).mean()
很好:)(例如:这里不需要显式np.array
创建)非常正确!我喜欢在回答问题时直截了当,这样读者会更好地理解。谢谢。我不想让人讨厌或忘恩负义,但您的代码中有一个小错误。yearval应该是yearvalssum(vals,0.0)
看起来比我在回答中使用的丑陋的sum(vals)/float(len(vals))
要好得多+1。@user2215228所以应该-现在已经更正-谢谢。我最初有不同的名字,但意识到我的名字不一致,所以我在帖子中更改了它们,而不是我的编辑:)@AshwiniChaudhary注意到,这意味着所有的求和都是以浮点数的形式进行的,有时会更快,但另一方面,有时会更慢,所以有时最好让它们以整数的形式求和。我不想让人讨厌或忘恩负义,但您的代码中有一个小错误。yearval应该是yearvalssum(vals,0.0)
看起来比我在回答中使用的丑陋的sum(vals)/float(len(vals))
要好得多+1。@user2215228所以应该-现在已经更正-谢谢。我最初有不同的名字,但我意识到我的名字不一致,所以我在帖子中更改了它们,而不是我的编辑:)@AshwiniChaudhary注意到,这意味着所有的求和都是以浮点数的形式进行的,有时会更快,但另一方面,有时会更慢,所以有时最好让它们以整数的形式求和