用连续值填充行,并使用pandas填充以上行

2024-04-26 05:02:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据框:

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的方法可以用pandas来实现它吗?你知道吗


Tags: 数据方法pandasdfforpythoniccol2col1
2条回答

一种方法是将^{}^{}一起使用:

(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

或者以另一种方式使用^{}

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

这里有一种使用set_index()^{}ffill的方法:

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

相关问题 更多 >