对熊猫的循环结果求和

时间:2021-06-17 04:19:28

标签: python pandas

我正在尝试编写一个代码来读取一个 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)
    
    

我可以知道如何解决这个问题吗?谢谢大家!

1 个答案:

答案 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