为了避免在饼图中有太多的小切片,我需要合并/求和系列中低于某个阈值的所有元素。到目前为止,这是我提出的:
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()
答案 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
但我不确定它比你的解决方案更好。