获取pd.DataFrame的某些行的总和

时间:2018-11-29 20:52:48

标签: python pandas dataframe

我有一个如下所示的pandas数据框,我想计算一些行的总和。我想这样计算:

我想从“ Glass”到“ Tables”获取第一列的总和,然后从“ Tables”到其他内容获取column1的总和,因为玻璃到桌子是一个类别,还有其他类别

因为我有几个工作表,而且对于每个工作表我都不知道每个类别下有多少个项目,所以我无法通过调用行索引来对行求和。

有人可以帮我吗?

                          0             1
0                     Glass       26,990 
1                   Fabrics       30,853 
2   Furniture & Accessories       136,022 
3                    Tables       132,454
4     Cabinet/Door Hardware       4,872
6                    Fences       5,952
7               Glass Doors       12,571

3 个答案:

答案 0 :(得分:1)

假设订单已经正确:

df.set_index(0)['Glass':'Tables'].sum()

答案 1 :(得分:0)

您可以使用pd.concat(),前提是您的类别是以类似的方式定义的:

categories = [('Glass','Tables'), ('Tables','Glass Doors')]

pd.concat([df.set_index(0)[c[0]:c[1]].sum() for c in categories], keys=categories)

返回:

Glass   Tables       1    326319
Tables  Glass Doors  1    155849

答案 2 :(得分:0)

这就是你可能要做的

import pandas as pd 
categories = {'Glass': 'Category 1', 'Fabrics': 'Category 1', 
              'Furniture & Accessories': 'Category 1', 
              'Tables': 'Category 2', 'Cabinet/Door Hardware': 'Category 2',
              'Fences': 'Category 3', 'Glass Doors': 'Category 4'}
df = pd.read_csv('rfile1.csv', converters={0: lambda x: categories[x]})
df
            0       1
0  Category 1   26990
1  Category 1   30853
2  Category 1  136022
3  Category 2  132454
4  Category 2    4872
5  Category 3    5952
6  Category 4   12571

df.groupby('0').sum()
                 sum
0
Category 1  193865
Category 2  137326
Category 3    5952
Category 4   12571