Pandas用D识别最后一排

2024-09-29 18:45:58 发布

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

我试图在Pandas数据框中完成两件事:

  1. 根据新的DateCompleted创建新列最后一行(“是”或“否”)
  2. 捕获当前行上的下一个事务,除非它是一个新的DateCompleted(在这种情况下标记为Null)。在

原始数据集

        DateCompleted      TranNumber  Sales

    0   1/1/17 10:15AM     3133         130.31
    1   1/1/17 11:21AM     3531         103.12  
    2   1/1/17 12:31PM     3652         99.23  
    3   1/2/17 9:31AM      3689         83.22
    4   1/2/17 10:31AM     3701         29.93
    5   1/3/17 8:30AM      3709         31.31 

期望输出

^{pr2}$

我可以根据以下情况获得下一笔交易:

 df['NextTranSales'] = df.Sales.shift(-1)

但我在确定DateCompleted组中的最后一行时遇到了困难,如果NextTranSales是最后一行,则将其标记为Null。在

谢谢你的帮助!在


Tags: 数据标记pandasdf原始数据情况事务null
2条回答

如果数据帧已按DateCompleted列排序,那么您可能只需要groupby.shift

date = pd.to_datetime(df.DateCompleted).dt.date    
df["NextTranSales"] = df.groupby(date).Sales.shift(-1)

enter image description here

如果需要LastRow列,可以使用groupby找到最后一行索引,然后将yes分配给这些行:

^{pr2}$

enter image description here

注意:这取决于Sales是否没有{}。如果它有任何NaN,我们将得到最后一行的错误判断。发生这种情况是因为我利用了移位列在最后一个位置留下NaN的便利性。在

d = df.DateCompleted.dt.date
m = {True: 'Yes', False: 'No'}
s = df.groupby(d).Sales.shift(-1)
df = df.assign(NextTranSales=s).assign(LastRow=s.isnull().map(m))
print(df)

        DateCompleted  TranNumber   Sales  NextTranSales LastRow
0 2017-01-01 10:15:00        3133  130.31         103.12      No
1 2017-01-01 11:21:00        3531  103.12          99.23      No
2 2017-01-01 12:31:00        3652   99.23            NaN     Yes
3 2017-01-02 09:31:00        3689   83.22          29.93      No
4 2017-01-02 10:31:00        3701   29.93            NaN     Yes
5 2017-01-03 08:30:00        3709   31.31            NaN     Yes

这样我们就可以摆脱noNaN的限制

^{pr2}$

相关问题 更多 >

    热门问题