如何在Python中基于条件设置数据帧的最后一行



我有1个数据帧df1,有2个不同的列。第一列"col1"是日期时间列,第二列是只有2个可能值(0或1(的int列。以下是数据帧的示例:


+----------------------+----------+
|          col1        |  col2    |
+----------------------+----------+
|  2020-01-01 10:00:00 |   0      |
+----------------------+----------+
|  2020-01-01 11:00:00 |   1      |
+----------------------+----------+
|  2020-01-01 12:00:00 |   1      |
+----------------------+----------+
|  2020-01-02 11:00:00 |   0      |
+----------------------+----------+
|  2020-01-02 12:00:00 |   1      |
+----------------------+----------+
|        ...           |   ...    |
+----------------------+----------+

正如您所看到的,日期时间是按升序排列的。我想要的是:对于每个不同的日期(在这个例子中有两个不同的日期,2020-01-01和2020-01-02,时间不同(,我想保留第一个1值,并将该日期中的前一个和下一个值设为0。因此,得到的数据帧将是:


+----------------------+----------+
|          col1        |  col2    |
+----------------------+----------+
|  2020-01-01 10:00:00 |   0      |
+----------------------+----------+
|  2020-01-01 11:00:00 |   1      |
+----------------------+----------+
|  2020-01-01 12:00:00 |   0      |
+----------------------+----------+
|  2020-01-02 11:00:00 |   0      |
+----------------------+----------+
|  2020-01-02 12:00:00 |   1      |
+----------------------+----------+
|        ...           |   ...    |
+----------------------+----------+

我如何在Python中做到这一点?

使用:

df['col1'] = pd.to_datetime(df.col1)
mask = df.groupby(df.col1.dt.date)['col2'].cumsum().eq(1)
df.col2.where(mask, 0, inplace = True)

输出:

>>> df
col1  col2
0  2020-01-01 10:00:00     0
1  2020-01-01 12:00:00     1
2  2020-01-01 12:00:00     0
3  2020-01-02 11:00:00     0
4  2020-01-02 12:00:00     1

最新更新