如何解决有没有更好的方法来在不使用管道的情况下用链接填充系列的缺失索引?
>>> df.groupby(...).some_operation()
1 1
3 2
5 1
7 4
8 5
dtype: int64
现在,我想将索引转换为一个 RangeIndex
,start=1,stop=9,step=1,如下所示:
1 1.0
2 NaN
3 2.0
4 NaN
5 1.0
6 NaN
7 4.0
8 5.0
dtype: float64
一种方法是:
>>> s = df.groupby(...).some_operation()
>>> s.reindex(range(s.index.min(),s.index.max()+1))
但我不想存储中间系列。另一种方法是:
>>> ( df.groupby(...).some_operation()
.pipe(lambda x: x.reindex(range(x.index.min(),x.index.max()+1))
)
这可行,但想知道是否有更好的方法,例如 interpolate
用于索引或 asfreq
,但用于 RangeIndex
。 reindex
本来可以是一个选项,但它不支持函数,即使它支持,它也会很笨重。好像一定有方法,因为这可能是很常见的事情,要么我不知道这种方法,要么想不到,如果存在的话。
可以假设 df.index
完全不同(假设 datetime index
)并且不太可能有帮助。可以通过具有任意大数字的 range
对象重新索引该系列并删除结尾的 nan
,但这会非常低效。
例如:
A = np.array([ 3,15,12,14,1,18,11,16,10,13,6,13])
B = np.array([1.1,1.09,0.8,0.71,0.37,0.93,0.9,0.54,1.29,0.33,0.39,0.69,0.89,0.46,1.12,0.29,0.61,0.81])
df = pd.DataFrame({'A': A,'B': B})
# This gives:
>>> df.groupby(df['B'].ge(1).cumsum()).size().value_counts(sort=False)
1 1
2 1
4 1
6 1
7 1
dtype: int64
我如何以比上述方法更好的方式制作如下所示:
1 1.0
2 1.0
3 NaN
4 1.0
5 NaN
6 1.0
7 1.0
dtype: float64
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。