使用熊猫填充具有连续值和行上方的行



我有一个这样的数据框:

df
col1    col2
1        A 
3        B
6        A
10       C

我想从 df 上方创建一个数据框,这样,如果 col1 值不连续,它将使用下一个 col1 值创建另一行,而 col2 值将是上面的值。

我正在寻找的数据框应该是

df
col1    col2
1        A
2        A
3        B
4        B
5        B
6        A
7        A
8        A
9        A
10       C

我可以使用简单的 for 循环来做到这一点,但是有没有任何 pythonic 方法可以使用熊猫最有效地做到这一点?

这是使用set_index()reindexffill的一种方法:

df.set_index('col1').reindex(range(df.col1.min(),df.col1.max()+1)).ffill().reset_index()
#df.set_index('col1').reindex(range(df.col1.min(),df.col1.max()+1),method='ffill')
#.reset_index()

col1 col2
0     1    A
1     2    A
2     3    B
3     4    B
4     5    B
5     6    A
6     7    A
7     8    A
8     9    A
9    10    C

一种方法是将reindexffill一起使用:

(df.set_index('col1')
.reindex(range(df.col1.iloc[0], df.col1.iloc[-1]+1))
.ffill()
.reset_index())
col1 col2
0     1    A
1     2    A
2     3    B
3     4    B
4     5    B
5     6    A
6     7    A
7     8    A
8     9    A
9    10    C

或者另一种使用Series.repeat的方式:

df.col2.repeat(df.col1.diff().shift(-1).fillna().reset_index(drop=True)

最新更新