我有一張與下面類似的表格。當當前值日期不是表中的最大日期時,我希望能夠洗掉行。在這種情況下,應該洗掉當前值不為空的行,因為日期不是最大日期。
| 日期 | 歷史 | 當前的 |
|---|---|---|
| 2019 年 6 月 1 日 | 0 | 無效的 |
| 2019 年 9 月 1 日 | 0 | 無效的 |
| 2019 年 12 月 1 日 | 0 | 無效的 |
| 2020 年 3 月 1 日 | 0 | 無效的 |
| 2020 年 6 月 1 日 | 470.006 | 無效的 |
| 2020 年 9 月 1 日 | 248.028 | 無效的 |
| 2020 年 12 月 1 日 | 246.276 | 無效的 |
| 2021 年 3 月 1 日 | 無效的 | 273.7215714 |
| 2021 年 4 月 1 日 | 269.182 | 無效的 |
| 2021 年 7 月 1 日 | 297.919 | 無效的 |
| 2021 年 10 月 1 日 | 312.68 | 無效的 |
| 2022 年 1 月 1 日 | 300.932 | 無效的 |
| 2022 年 4 月 1 日 | 340.767 | 無效的 |
uj5u.com熱心網友回復:
如果您的 DataFrame 被呼叫df,那么您可以使用掩碼僅保留最大日期值:
df = df[df['date'] == df['date'].max()]
在這里,您是說您只想要列df中的值df['date']等于來自的最大值的行df['date']。
如果您只想要“當前”列不存在的地方NULL,那么您可以執行以下操作:
df = df[(df['current'] == 'NULL') | (df['date'] == df['date'].max())]
uj5u.com熱心網友回復:
你可以這樣做:
df = df[(df['current'].isnull()) | (df['date'] == df['date'].max())]
uj5u.com熱心網友回復:
不確定我是否理解你想要做什么,但這是我的看法。
將您的日期轉換為 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) 和任何非空current值的另一行,則應保留它。
結果表如下所示(洗掉原始 df 的第 7 行):
| 日期 | 歷史 | 當前的 | |
|---|---|---|---|
| 0 | 2019-06-01 00:00:00 | 0 | 楠 |
| 1 | 2019-09-01 00:00:00 | 0 | 楠 |
| 2 | 2019-12-01 00:00:00 | 0 | 楠 |
| 3 | 2020-03-01 00:00:00 | 0 | 楠 |
| 4 | 2020-06-01 00:00:00 | 470.006 | 楠 |
| 5 | 2020-09-01 00:00:00 | 248.028 | 楠 |
| 6 | 2020-12-01 00:00:00 | 246.276 | 楠 |
| 8 | 2021-04-01 00:00:00 | 269.182 | 楠 |
| 9 | 2021-07-01 00:00:00 | 297.919 | 楠 |
| 10 | 2021-10-01 00:00:00 | 312.68 | 楠 |
| 11 | 2022-01-01 00:00:00 | 300.932 | 楠 |
| 12 | 2022-04-01 00:00:00 | 340.767 | 楠 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484945.html
上一篇:根據不同的資料框賦予一個值
