Python 一个列表中与另一个列表中相同日期对应的项目的平均值

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和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 = 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应该是yearvals
sum(vals,0.0)
看起来比我在回答中使用的丑陋的
sum(vals)/float(len(vals))
要好得多+1。@user2215228所以应该-现在已经更正-谢谢。我最初有不同的名字,但意识到我的名字不一致,所以我在帖子中更改了它们,而不是我的编辑:)@AshwiniChaudhary注意到,这意味着所有的求和都是以浮点数的形式进行的,有时会更快,但另一方面,有时会更慢,所以有时最好让它们以整数的形式求和。我不想让人讨厌或忘恩负义,但您的代码中有一个小错误。yearval应该是yearvals
sum(vals,0.0)
看起来比我在回答中使用的丑陋的
sum(vals)/float(len(vals))
要好得多+1。@user2215228所以应该-现在已经更正-谢谢。我最初有不同的名字,但我意识到我的名字不一致,所以我在帖子中更改了它们,而不是我的编辑:)@AshwiniChaudhary注意到,这意味着所有的求和都是以浮点数的形式进行的,有时会更快,但另一方面,有时会更慢,所以有时最好让它们以整数的形式求和