我每个月都有一个Pandas DataFrame值;每列是一个单独的时间序列,但它们从不同的月份开始。每个系列开始前的值为NaN
。
df = pd.DataFrame({
'a': [np.nan, np.nan, 1, 2, 3, 4],
'b': [2, 4, 6, 8, 10, 12],
'c': [np.nan, -1, -2, -3, np.nan, -5]},
index=pd.date_range('2018-01', '2018-06', freq='MS')
)
a b c
2018-01-01 NaN 2 NaN
2018-02-01 NaN 4 -1.0
2018-03-01 1.0 6 -2.0
2018-04-01 2.0 8 -3.0
2018-05-01 3.0 10 NaN
2018-06-01 4.0 12 -5.0
我希望转换此数据框,以便对于每一列,第一个非空值位于第一行,NaN
位于结尾。
这是我最好的尝试:
df.reset_index(drop=True).apply(lambda c: c.shift(-c.first_valid_index()))
a b c
0 1.0 2 -1.0
1 2.0 4 -2.0
2 3.0 6 -3.0
3 4.0 8 NaN
4 NaN 10 -5.0
5 NaN 12 NaN
在熊猫中有没有内置或更自然的方式来做到这一点?这个操作有名字吗?