Python 如何对索引大于X的所有值求和?
假设我有这个系列:Python 如何对索引大于X的所有值求和?,python,pandas,Python,Pandas,假设我有这个系列: >>> s = pd.Series({1:10,2:5,3:8,4:12,5:7,6:3}) >>> s 1 10 2 5 3 8 4 12 5 7 6 3 我想求指数大于X的所有值的和。因此,如果X=3,我想得到: >>> X = 3 >>> s.some_magic(X) 1 10 2 5 3 8 >3 22 我用了一种
>>> s = pd.Series({1:10,2:5,3:8,4:12,5:7,6:3})
>>> s
1 10
2 5
3 8
4 12
5 7
6 3
我想求指数大于X的所有值的和。因此,如果X=3,我想得到:
>>> X = 3
>>> s.some_magic(X)
1 10
2 5
3 8
>3 22
我用了一种相当笨拙的方式:
lt = s[s.index.values <= 3]
gt = s[s.index.values > 3]
gt_s = pd.Series({'>3':sum(gt)})
lt.append(gt_s)
并得到了预期的结果,但我相信应该有一个更简单、更优雅的方法。。。还是有?这里有一个可能的解决方案:
import pandas as pd
s = pd.Series({1: 10, 2: 5, 3: 8, 4: 12, 5: 7, 6: 3})
iv = s.index.values
print s[iv <= 3].append(pd.Series({'>3': s[iv > 3].sum()}))
下面是一个可能的解决方案:
import pandas as pd
s = pd.Series({1: 10, 2: 5, 3: 8, 4: 12, 5: 7, 6: 3})
iv = s.index.values
print s[iv <= 3].append(pd.Series({'>3': s[iv > 3].sum()}))
或者
或者
你只需要做s.loc[4:]就可以了。sumyou只需要做s.loc[4:]就可以了。SumThank,这是一种更好的求和方式,但仍然不能解决创建一个系列并“手动”添加它的笨拙部分。@soungalo啊,好的,我错过了那部分,编辑了我的回答谢谢,这是一种更好的求和方式,但是仍然不能解决创建一个系列并“手动”添加它的笨拙部分。@soungalo啊,好吧,我错过了那部分,编辑了我的答案
s.groupby(s.index.to_series().mask(s.index > 3, '>3')).sum()
Out:
1 10
2 5
3 8
>3 22
dtype: int64