创建具有重复天数的倒计时变量

时间:2018-10-08 18:46:07

标签: python pandas numpy dataframe

我有一个数据框“ reload”,我想创建两个变量,用于计算直到期中和总统选举为止的天数(实际选举日为0,前一天为1,依此类推) 。数据框中包含2008年至2016年选举之间的所有日子,但是其中有些日子不只一次。我无法弄清楚如何创建一个不会重复计算天数的计数器。

HttpContext.SignInAsync("Cookies", User)

这是数据示例,包括重复的日期输入

reload = pd.read_excel('master.xlsx', skiprows = 1)

具有“ 307.0”作为第一项的两行(从左数第4列和第5列)是我尝试创建的计数器变量。之所以会出现NaN条目,是因为一旦我意识到自己制作的计数器将无法使用,我便停止填写条目。

我想要的结果

      0        1          2008-01-02   307.0   307.0  R  D   R  198  235    0  49   
      1        2          2008-01-03   306.0   306.0  R  D   R  198  235    0  49   
      2        3          2008-01-04   305.0   305.0  R  D   R  198  235    0  49   
      3        4          2008-01-05   304.0   304.0  R  D   R  198  235    0  49   
      4        5          2008-01-06   303.0   303.0  R  D   R  198  235    0  49   
      5        6          2008-01-07   302.0   302.0  R  D   R  198  235    0  49   
      ....
      6765  6766          2017-09-25     NaN     NaN  R  R   R  246  187    0  54   
      6766  6767          2017-09-25     NaN     NaN  R  R   R  246  187    0  54   
      6767  6768          2017-09-25     NaN     NaN  R  R   R  246  187    0  54 

1 个答案:

答案 0 :(得分:1)

就一个最小的例子而言,请考虑:

df = pd.DataFrame([['2008-01-02'],['2008-01-03'],['2008-01-04'],['2008-01-05'],['2008-01-05'],['2008-01-05'],['2008-01-06'],
            ['2008-01-06'],['2008-01-07'],['2008-01-08'],['2008-01-09'],['2008-01-10'],['2008-01-10'],['2008-01-11']],
            columns=['Date'])

收益:

          Date
0   2008-01-02
1   2008-01-03
2   2008-01-04
3   2008-01-05
4   2008-01-05
5   2008-01-05
6   2008-01-06
7   2008-01-06
8   2008-01-07
9   2008-01-08
10  2008-01-09
11  2008-01-10
12  2008-01-10
13  2008-01-11

您可以使用duplicated()创建布尔掩码,并使用cumsum()以相反的顺序[::-1]执行倒计时:

df['Countdown'] = (~df['Date'].duplicated('last'))[::-1].cumsum()-1

礼物:

          Date  Countdown
0   2008-01-02          9
1   2008-01-03          8
2   2008-01-04          7
3   2008-01-05          6
4   2008-01-05          6
5   2008-01-05          6
6   2008-01-06          5
7   2008-01-06          5
8   2008-01-07          4
9   2008-01-08          3
10  2008-01-09          2
11  2008-01-10          1
12  2008-01-10          1
13  2008-01-11          0