如何填充Pandas中每组的最后一行?

2024-10-03 13:21:28 发布

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

我有一个数据帧df,每个组的最后一行(groupbySTK_ID)是NaN:

>>> print df
                   sales  opr_pft  net_pft
STK_ID RPT_Date                           
002138 20130331   2.0703   0.3373   0.2829
       20130630      NaN      NaN      NaN
       20130930   7.4993   1.2248   1.1630
       20140122      NaN      NaN      NaN
600004 20130331  11.8429   3.0816   2.1637
       20130630  24.6232   6.2152   4.5135
       20130930  37.9673   9.2088   6.6463
       20140122      NaN      NaN      NaN
600809 20130331  27.9517   9.9426   7.5182
       20130630  40.6460  13.9414   9.8572
       20130930  53.0501  16.8081  11.8605
       20140122      NaN      NaN      NaN

现在我希望将每个组的最后一行与其前一行填充,结果应该如下所示:

^{pr2}$

我几乎是通过:df.groupby(level=0).apply(lambda grp: grp.fillna(method='ffill'))完成的,它生成了以下内容:

                   sales  opr_pft  net_pft
STK_ID RPT_Date                           
002138 20130331   2.0703   0.3373   0.2829
       20130630   2.0703   0.3373   0.2829
       20130930   7.4993   1.2248   1.1630
       20140122   7.4993   1.2248   1.1630
600004 20130331  11.8429   3.0816   2.1637
       20130630  24.6232   6.2152   4.5135
       20130930  37.9673   9.2088   6.6463
       20140122  37.9673   9.2088   6.6463
600809 20130331  27.9517   9.9426   7.5182
       20130630  40.6460  13.9414   9.8572
       20130930  53.0501  16.8081  11.8605
       20140122  53.0501  16.8081  11.8605

这不是我想要的,它会把组内的所有行都填满。那么如何填充熊猫中每组的最后一行呢?在


Tags: 数据iddfdatenetnanprintsales
1条回答
网友
1楼 · 发布于 2024-10-03 13:21:28

您可以使用groupby中的另一个函数:

def f(g):
    last = len(g.values)-1
    g.iloc[last,:] = g.iloc[last-1,:]
    return g
print df.groupby(level=0).apply(f)

输出:

^{pr2}$

相关问题 更多 >