如果起息日不是最大日期,则删除行

Drop row if value date is not a max date

我有一个 table 看起来与下面的相似。当当前值日期不是 table 中的最大日期时,我希望能够删除行。在这种情况下,当前值不为空的行应该被删除,因为日期不是最大日期。

date history current
6/1/2019 0 NULL
9/1/2019 0 NULL
12/1/2019 0 NULL
3/1/2020 0 NULL
6/1/2020 470.006 NULL
9/1/2020 248.028 NULL
12/1/2020 246.276 NULL
3/1/2021 NULL 273.7215714
4/1/2021 269.182 NULL
7/1/2021 297.919 NULL
10/1/2021 312.68 NULL
1/1/2022 300.932 NULL
4/1/2022 340.767 NULL

如果您的 DataFrame 名为 df,那么您可以使用掩码仅保留最大日期值:

df = df[df['date'] == df['date'].max()]

在这里你是说你只需要来自 df 的行,其中列 df['date'] 中的值等于来自 df['date'].

的最大值

如果您只想在 'current' 列不是 NULL 的情况下执行此操作,则可以执行以下操作:

df = df[(df['current'] == 'NULL') | (df['date'] == df['date'].max())]

你可以这样做:

df = df[(df['current'].isnull()) | (df['date'] == df['date'].max())]

不确定我是否理解你想要做什么,但这是我的看法。

将您的日期转换为 pandas 日期时间对象并将 NULL 值替换为 NaN

import numpy as np
import pandas as pd

df = df.replace('NULL', np.nan)
df.date = pd.to_datetime(df.date)

那么你可以这样做:

df.query('not (~current.isna() and date != date.max())')

这将删除具有 current273.7215714 的行,因为它的日期不是最大日期。如果您添加具有最大日期 (2022-04-01) 和任何 non-null current 值的另一行,则应保留它。

结果 table 看起来像这样(删除原始 df 的第 7 行):

date history current
0 2019-06-01 00:00:00 0 nan
1 2019-09-01 00:00:00 0 nan
2 2019-12-01 00:00:00 0 nan
3 2020-03-01 00:00:00 0 nan
4 2020-06-01 00:00:00 470.006 nan
5 2020-09-01 00:00:00 248.028 nan
6 2020-12-01 00:00:00 246.276 nan
8 2021-04-01 00:00:00 269.182 nan
9 2021-07-01 00:00:00 297.919 nan
10 2021-10-01 00:00:00 312.68 nan
11 2022-01-01 00:00:00 300.932 nan
12 2022-04-01 00:00:00 340.767 nan