我有一个这样的数据框:
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()
和reindex
和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
一种方法是将reindex
与ffill
一起使用:
(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)