python - 仅当与 Python 相同年份和月份的值时才应用 fillna(method='bfill')
问题描述
假设我有一个面板数据框,NaN
里面有很多 s 如下:
import pandas as pd
import numpy as np
np.random.seed(2021)
dates = pd.date_range('20130226', periods=720)
df = pd.DataFrame(np.random.randint(0, 100, size=(720, 3)), index=dates, columns=list('ABC'))
for col in df.columns:
df.loc[df.sample(frac=0.4).index, col] = pd.np.nan
df
出去:
A B C
2013-02-26 NaN NaN NaN
2013-02-27 NaN NaN 44.0
2013-02-28 62.0 NaN 29.0
2013-03-01 21.0 NaN 24.0
2013-03-02 12.0 70.0 70.0
... ... ...
2015-02-11 38.0 42.0 NaN
2015-02-12 67.0 NaN NaN
2015-02-13 27.0 10.0 74.0
2015-02-14 18.0 NaN NaN
2015-02-15 NaN NaN NaN
仅当它们相同df.fillna(method='bfill')
并且:df.fillna(method='ffill')
year
month
例如,如果我 apply df.fillna(method='bfill')
,预期的结果将是这样的:
A B C
2013-02-26 62.0 NaN 44.0
2013-02-27 62.0 NaN 44.0
2013-02-28 62.0 NaN 29.0
2013-03-01 21.0 70.0 24.0
2013-03-02 12.0 70.0 70.0
... ... ...
2015-02-11 38.0 42.0 74.0
2015-02-12 67.0 10.0 74.0
2015-02-13 27.0 10.0 74.0
2015-02-14 18.0 NaN NaN
2015-02-15 NaN NaN NaN
我怎么能在 Pandas 中做到这一点?谢谢。
解决方案
您可以resample
按M
(月)和transform
bfill
:
>>> df.resample("M").transform('bfill')
A B C
2013-02-26 62.0 NaN 44.0
2013-02-27 62.0 NaN 44.0
2013-02-28 62.0 NaN 29.0
2013-03-01 21.0 70.0 24.0
2013-03-02 12.0 70.0 70.0
... ... ... ...
2015-02-11 38.0 42.0 74.0
2015-02-12 67.0 10.0 74.0
2015-02-13 27.0 10.0 74.0
2015-02-14 18.0 NaN NaN
2015-02-15 NaN NaN NaN
[720 rows x 3 columns]
>>>
对于特定列:
>>> df[['A', 'B']] = df.resample("M")[['A', 'B']].transform('bfill')
>>> df
A B C
2013-02-26 62.0 NaN NaN
2013-02-27 62.0 NaN 44.0
2013-02-28 62.0 NaN 29.0
2013-03-01 21.0 70.0 24.0
2013-03-02 12.0 70.0 70.0
... ... ... ...
2015-02-11 38.0 42.0 NaN
2015-02-12 67.0 10.0 NaN
2015-02-13 27.0 10.0 74.0
2015-02-14 18.0 NaN NaN
2015-02-15 NaN NaN NaN
[720 rows x 3 columns]
>>>
推荐阅读
- c++ - 如何在 Windows 上的 cmake 中链接包含 lib 和包含文件夹的库
- azure - Azure 数据仓库备份到 SQL 数据库
- python - 尝试安装 Python GDAL 包但出现错误
- kubernetes - 是否有一种实用的方法可以在 kubernetes 中通过主机名保护对 mariadb 的访问
- r - 在 R 闪亮中,如何使“observeEvent”不会被“updateSelectizeInput”的更改触发
- python - 从 Google Compute Engine (python) 访问 Google Sheets API
- javascript - 暂停 addEventListener 事件
- python - 异步更新已经初始化的类变量
- db2 - DB2 - 使用带有字符串数组参数的 Dapper 选择查询将不会返回正确的结果
- amazon-web-services - AWS Timestream:功能问题:任何。要么函数不存在,要么依赖函数有问题