检查前一天的新列

2024-09-30 16:35:45 发布

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

我有一个Dataframe,它有一个Datetime作为索引,还有一个名为“Holiday”的列,它是一个带有1或0的标志。你知道吗

因此,如果datetimeindex是假日,则假日列中有1,否则为0。你知道吗

我需要一个新的列,说明给定的datetimeindex是假期后的第一天还是第二天不是,是那个新列应该只查看其前一天是否将标志“HOLIDAY”设置为1,然后将其标志设置为1,否则为0。你知道吗

编辑

正在执行:

df['DayAfter'] = df.Holiday.shift(1).fillna(0)

具有输出:

                        Holiday    DayAfter     AnyNumber  
Datum                                                
...
2014-01-01 20:00:00         1        1.0          9  
2014-01-01 20:30:00         1        1.0          2  
2014-01-01 21:00:00         1        1.0          3  
2014-01-01 21:30:00         1        1.0          3  
2014-01-01 22:00:00         1        1.0          6  
2014-01-01 22:30:00         1        1.0          1  
2014-01-01 23:00:00         1        1.0          1  
2014-01-01 23:30:00         1        1.0          1  
2014-01-02 00:00:00         0        1.0          1  
2014-01-02 00:30:00         0        0.0          2  
2014-01-02 01:00:00         0        0.0          1  
2014-01-02 01:30:00         0        0.0          1 
...

如果您检查2014-01-02的第一个时间戳,则DayAfter标志设置正确。但其他标志是0。那是错误的。你知道吗


Tags: 编辑dataframedfdatetimeshift标志错误时间
1条回答
网友
1楼 · 发布于 2024-09-30 16:35:45

创建一个唯一的假日数组,并用一天来抵消它们

days = pd.Series(df[df.Holiday == 1].index).add(pd.DateOffset(1)).dt.date.unique()

创建一个带有一天假期偏移量的新列(days

df['DayAfter'] = np.where(pd.Series(df.index).dt.date.isin(days),1,0)



                 Holiday  AnyNumber  DayAfter
Datum
2014-01-01 20:00:00        1          9         0
2014-01-01 20:30:00        1          2         0
2014-01-01 21:00:00        1          3         0
2014-01-01 21:30:00        1          3         0
2014-01-01 22:00:00        1          6         0
2014-01-01 22:30:00        1          1         0
2014-01-01 23:00:00        1          1         0
2014-01-01 23:30:00        1          1         0
2014-01-02 00:00:00        0          1         1
2014-01-02 00:30:00        0          2         1
2014-01-02 01:00:00        0          1         1
2014-01-02 01:30:00        0          1         1

相关问题 更多 >