如果起息日不是最大日期,则删除行
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())')
这将删除具有 current
值 273.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
我有一个 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())')
这将删除具有 current
值 273.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 |