我正在尝试编写一个代码来读取一个 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)
我可以知道如何解决这个问题吗?谢谢大家!
答案 0 :(得分:1)
如果您的数据框 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