【问题标题】:Get last N rows from a particular place in pandas data frame based on a value根据值从熊猫数据框中的特定位置获取最后 N 行
【发布时间】:2020-07-30 18:15:15
【问题描述】:

我有一个类似的日期集

Sno change  date
0   NaN 2017-01-01
1   NaN 2017-02-01
2   NaN 2017-03-01
3   NaN 2017-04-01
4   NaN 2017-05-01
5   NaN 2017-06-01
6   NaN 2017-07-01
7   NaN 2017-08-01
8   0.0 2017-09-01
9   NaN 2017-10-01
10  NaN 2017-11-01
11  1   2017-12-01
12  NaN 2018-01-01
13  NaN 2018-02-01

当“更改”列中的值从 NaN 更改为其他值时,我想获取数据框中“日期”列的最后 5 行。所以对于这个例子,它会分为两组:

Sno    date
3   2017-04-01
4   2017-05-01
5   2017-06-01
6   2017-07-01
7   2017-08-01
8   2017-09-01

Sno    date
6   2017-07-01
7   2017-08-01
8   2017-09-01
9   2017-10-01
10  2017-11-01
11  2017-12-01

谁能帮我搞定这个?谢谢

【问题讨论】:

    标签: python python-3.x pandas numpy dataframe


    【解决方案1】:

    您可以尝试使用locisna

    #df=df.set_index('Sno')
    idxs=df.index[~df.change.isna()]
    sets=[df.loc[i-5:i,['date']] for i in idxs]
    

    输出:

    sets
    [           date
     Sno            
     3    2017-04-01
     4    2017-05-01
     5    2017-06-01
     6    2017-07-01
     7    2017-08-01
     8    2017-09-01,
    
                date
     Sno            
     6    2017-07-01
     7    2017-08-01
     8    2017-09-01
     9    2017-10-01
     10   2017-11-01
     11   2017-12-01]
    

    【讨论】:

      【解决方案2】:

      您可以使用isna() 检查NaN values, then np.whereto extract the locations of last row, finally,np.r_` 以创建切片:

      s = df.change.isna()
      
      valids = np.where(s.shift() & (~s))[0]
      
      [df.iloc[np.r_[x-5:x]] for x in valid]
      

      [   Sno  change        date
       3    3     NaN  2017-04-01
       4    4     NaN  2017-05-01
       5    5     NaN  2017-06-01
       6    6     NaN  2017-07-01
       7    7     NaN  2017-08-01,
           Sno  change        date
       6     6     NaN  2017-07-01
       7     7     NaN  2017-08-01
       8     8     0.0  2017-09-01
       9     9     NaN  2017-10-01
       10   10     NaN  2017-11-01]
      

      【讨论】:

        猜你喜欢
        • 2018-12-25
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        • 2019-11-07
        • 2016-05-07
        相关资源
        最近更新 更多