问题描述
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的新手。
解决方法
最简单的方法是将系列转换为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
,
代码:
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
,
我认为最好的方法是为数据创建另一列,以标识该行是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','E']].sum()
将输出以下内容:
count 11
dtype: int64