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

2024-05-16 20:41:24 发布

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

我有一个数据框'重新加载',我想创建两个变量倒计时天数,直到中期和总统选举(实际选举日将是0,前一天将是1等)。2008年至2016年选举期间的所有日子都在数据框架内,但有些日子不止一次被包括在内。我不知道如何创建一个不重复计算天数的计数器。你知道吗

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

这是一个包含重复日期输入的数据示例

      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 

以“307.0”作为第一个条目的两行(左边的第4列和第5列)是我尝试创建的计数器变量。出现NaN条目是因为一旦我意识到我所做的计数器不起作用,我就停止填充条目。你知道吗

我想要的产量

   Date  Countdown
   0  2008-01-02          8
   1  2008-01-03          7
   2  2008-01-03          7
   3  2008-01-05          6
   4  2008-01-06          5
   5  2008-01-07          4
   6  2008-01-08          3

Tags: 数据master框架read计数器条目nanxlsx
1条回答
网友
1楼 · 发布于 2024-05-16 20:41:24

举个简单的例子,考虑一下:

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

相关问题 更多 >