合并熊猫系列中的选择

时间:2015-10-22 09:17:20

标签: python pandas

为了避免在饼图中有太多的小切片,我需要合并/求和系列中低于某个阈值的所有元素。到目前为止,这是我提出的:

from pandas import Series
import numpy as np

ser = Series(np.random.randint(100, size=10), index=list('abcdefghij')).order(ascending=False)

thresh = 20
cleaned = ser[ser>=thresh].append(Series([ser[ser<thresh].sum()],
                                         index=["below {}".format(thresh)]))

这提供了正确的结果,但使用append困扰了我,并没有让我像熊猫一样。

是否有更吸引人的方法来达到相同的效果?

更新

这是一个基于IanS下面的评论的解决方案。

ser.index = map(lambda (x, y): x if y>=thresh else "below {}".format(thresh),
                ser.iteritems())

ser.index = [x if y >=thresh else "below {}".format(thresh) for (x,y) in ser.iteritems()]

然后

ser.groupby(ser.index).sum()

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

df = ser.groupby(ser>20).apply(lambda x:
                               x if (x>20).all()
                               else pd.Series(x.sum(),
                                              index=["below 20"])
                              ).reset_index().set_index("level_1"
                                                        ).iloc[:,1:][0].copy()

df.name = None
df.index.name=None
df.sort(ascending=False)
df
c           97
f           88
e           61
h           60
a           53
g           49
i           37
d           24
below 20    21
dtype: int64

但我不确定它比你的解决方案更好。