2016-08-24 63 views
1

比方說,我有這個系列:如何求和索引大於X的所有值?

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

,並得到想要的結果,但我認爲應該有一種更簡單,更優雅的方式......還是有?

+1

你可以做's.loc [4:]和()' – EdChum

回答

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

這裏是一個可能的解決方案:

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

謝謝,這是一個有點更好的方式來總結,但仍然不能解決創建系列和「手動」追加它的笨拙部分。 – soungalo

+0

@soungalo啊,好吧,我錯過了那部分,編輯了我的答案 – BPL

相關問題