如何在Python中找到多个字典列表中项目的累积总和

4

我有一个由公司名称和营收构成的字典列表,我想在这个列表上运行ABC分析,并寻找最有效的方法。

myList = [{"Company":"Company A", "Revenue":100}, {"Company":"Company B", "Revenue":350}, {"Company":"Company C", "Revenue":80}]

我想使用numpy的cumsum。所以我首先要按照相反的顺序排序收入。我会像这样做:

newList = sorted(myList, key=lambda k: k['Revenue'], reverse=True)

如何获得营收的累加总和,以进行ABC分析?

3个回答

2

就你所做的事情而言,Pandas似乎更加适合。以下是一个示例:

df = pd.DataFrame(myList)                             # Create a dataframe
sortedDf = df.sort_values('Revenue', ascending=False) # Sort by revenue
result = sortedDf['Revenue'].to_numpy().cumsum()      # Make the cumulative sum

print(sortedDf)
print(result)

以下是结果:

     Company  Revenue
1  Company B      350
0  Company A      100
2  Company C       80

[350 450 530]

请注意,Pandas在内部使用Numpy来存储其列。请注意,您可以直接在数据框上进行累积求和以保留元信息并进行进一步计算。

2
让我们尝试在将Revenue按降序排列后使用np.cumsum
np.cumsum(sorted([d['Revenue'] for d in myList], reverse=True))

array([350, 450, 530])

1

使用 numpy.cumsum():

在线尝试!

import numpy as np
myList = [{"Company":"Company A", "Revenue":100}, {"Company":"Company B", "Revenue":350}, {"Company":"Company C", "Revenue":80}]
newList = sorted(myList, key=lambda k: k['Revenue'], reverse=True)
a = np.array([e['Revenue'] for e in newList])
print(a.cumsum())

输出:

[350 450 530]

你可以只使用Python标准库中的itertools.accumulate()函数: 在线尝试!
import itertools
myList = [{"Company":"Company A", "Revenue":100}, {"Company":"Company B", "Revenue":350}, {"Company":"Company C", "Revenue":80}]
newList = sorted(myList, key=lambda k: k['Revenue'], reverse=True)
a = [e['Revenue'] for e in newList]
print(list(itertools.accumulate(a)))

输出:

[350, 450, 530]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接