我们说我有这个系列:
>>> 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)
并获得了理想的结果,但我相信应该有一种更简单,更优雅的方式......或者在那里?
答案 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()}))