有没有更好的方法来在不使用管道的情况下用链接填充系列的缺失索引?

问题描述

假设我有一个数据框,经过一些操作,我得到了一个中间系列:

>>> 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,但用于 RangeIndexreindex 本来可以是一个选项,但它不支持函数,即使它支持,它也会很笨重。好像一定有​​方法,因为这可能是很常见的事情,要么我不知道这种方法,要么想不到,如果存在的话。

可以假设 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 (将#修改为@)