根据python中的索引名称计算系列的总和

时间:2020-11-12 01:22:36

标签: python pandas indexing sum series

我有以下系列文章:

Index   Count
A        2
B        5
C        3
D        1
E        6

我想将A视为NO1,将B和D视为NO2,将C和E视为NO3。 (请注意,NO1,NO2和NO3是类别,没有可遵循的模式。)

因此结果将是

NO1 = 2
No2 = 6
No3 = 9

我尝试使用pd.Series([]).sum(),结果是0,但这给了我这个警告:

DeprecationWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.

有谁可以阐明这一点?我实际上是python的新手。

3 个答案:

答案 0 :(得分:2)

最简单的方法是将系列转换为DataFrame,然后为该类别添加新列。您尚未提供该类别的映射,但是我敢肯定,您可以弄清楚如何在其中创建列,如下所示:

Index   Count  Category
A        2      No1
B        5      No2
C        3      No3
D        1      No2
E        6      No3

在这里,您可以使用DataFrame.groupby方法非常简单地找到每个类别的总和:

count = df.groupby('Category').Count.sum()
      Count
No1      2  
No2      6 
No3      9 

答案 1 :(得分:0)

代码:

import pandas as pd

df = pd.Series([2,5,3,1,6], index = ['A','B','C','D','E'])
print(df, '\n ---------- \n')

df['NO1'] = df.A
df['No2'] = df.B + df.D
df['No3'] = df.C + df.E
print(df)

输出:

A    2
B    5
C    3
D    1
E    6
dtype: int64
 ----------

A      2
B      5
C      3
D      1
E      6
NO1    2
No2    6
No3    9
dtype: int64

答案 2 :(得分:0)

我认为最好的方法是为数据创建另一列,以标识该行是No1,no2还是n3,例如:

   count   No
A      2  No1
B      5  No2
C      3  No3
D      1  No2
E      6  No3

在这种情况下,您可以像这样使用groupby求和:

df.groupby('No').sum()

给出:

      count
No         
No1       2
No2       6
No3       9

如果不想固定No并假设要对A,C和E求和,则可以这样做:

df.loc[['A','C','E']].sum()

将输出以下内容:

count    11
dtype: int64
相关问题