python - 用 pandas 在 for 循环中求和结果
问题描述
我正在尝试编写一个代码来读取一个 excel 文件,其中我有一个机器数量的列表“否”以及它的价格和大小,我试图将其相加以获得所需的总价格和总大小。这是我尝试过的,但它给了我一个 NaN 输出。
ttp = 0
tts = 0
for abcde in ws_all:
price = fn.loc[fn['WS Name'] == abcde]['Tool Price']
size = fn.loc[fn['WS Name'] == abcde]['Size']
nooo = fn.loc[fn['WS Name'] == abcde]['No']
mprice = price * nooo
msize = size * nooo
ttp += mprice
print(ttp)
我可以知道如何解决这个问题吗?谢谢你们!
解决方案
如果您的数据框fn
如下所示:
# df = pd.DataFrame({'WS Name': np.random.choice(['abcde', 'fghij', 'klmno', # 'pqrst'], 20),
# 'Tool Price': np.random.randint(10, 20, 20),
# 'Size': np.random.randint(1, 10, 20),
# 'No': np.random.randint(1, 10, 20)})
>>> df
WS Name Tool Price Size No
0 klmno 18 4 1
1 klmno 16 7 4
2 pqrst 15 9 8
3 pqrst 17 1 3
4 klmno 10 5 9
5 pqrst 13 9 8
6 abcde 16 8 2
7 klmno 11 5 1
8 abcde 18 1 7
9 klmno 12 7 2
10 fghij 18 7 4
11 abcde 14 1 3
12 klmno 10 6 4
13 fghij 10 6 9
14 abcde 19 9 4
15 abcde 12 8 4
16 abcde 15 3 7
17 fghij 10 6 8
18 klmno 18 8 8
19 pqrst 19 3 1
您可以使用split-apply-combine模式:
ttp = df.groupby('WS Name').apply(lambda x: sum(x['Tool Price'] * x['No']))
tts = df.groupby('WS Name').apply(lambda x: sum(x['Size'] * x['No']))
构建您的组合数据框
>>> pd.DataFrame({"Total Price": ttp, "Total Size": tts})
Total Price Total Size
WS Name
abcde 429 115
fghij 242 130
klmno 391 184
pqrst 294 150
推荐阅读
- python - python 使用递归:为什么一种变通方法有效而另一种失败?
- io - 用逗号保存文件时在 julia 中使用 JLD2 加载文件
- python - 如何解析列中包含字典行的数据框
- javascript - 在浏览器中显示 .hdr Uint8Array 图像
- mongodb - 通过 ID 查询文档比通过 MongoDB 中的嵌入式文档查询更快
- javascript - 如何使用拆分将短语作为一个元素添加到数组中?
- c# - 为什么 Windows.UI.Composition AnimationController.Progress 总是返回零?
- django-templates - 带有 jinja2 模板的 django allauth
- python - 在提交数据表单期间,我可以使用 Python 在 MongoDB 中获取 ObjectID
- python - 置信区间和图例