如何对索引大于X的所有值求和?

时间:2016-08-24 14:10:32

标签: 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

我设法以这种相当笨拙的方式做到了:

lt = s[s.index.values <= 3]
gt = s[s.index.values > 3]
gt_s = pd.Series({'>3':sum(gt)})
lt.append(gt_s)

并获得了理想的结果,但我相信应该有一种更简单,更优雅的方式......或者在那里?

2 个答案:

答案 0 :(得分:4)

s.groupby(np.where(s.index > 3, '>3', s.index)).sum()

或者,

s.groupby(s.index.to_series().mask(s.index > 3, '>3')).sum()
Out: 
1     10
2      5
3      8
>3    22
dtype: int64

答案 1 :(得分:1)

这是一个可能的解决方案:

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()}))