gpt4 book ai didi

python - 在 Pandas 中使用替换同时 ffill 和 bfill

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:44 24 4
gpt4 key购买 nike

问题

有没有办法在 Pandas 中使用 replace 同时 ffillbfill

请参阅以下示例:

l = 12
rng = pd.date_range('1/1/2011', periods=l, freq='8h')
df = pd.DataFrame({
'animals':[0,0,'cat',0,'dog',0,0,0,'mouse',0,'ant',0],
},index=rng)

df
Out[93]:
animals
2011-01-01 00:00:00 0
2011-01-01 08:00:00 0
2011-01-01 16:00:00 cat
2011-01-02 00:00:00 0
2011-01-02 08:00:00 dog
2011-01-02 16:00:00 0
2011-01-03 00:00:00 0
2011-01-03 08:00:00 0
2011-01-03 16:00:00 mouse
2011-01-04 00:00:00 0
2011-01-04 08:00:00 ant
2011-01-04 16:00:00 0

我目前正在使用两次 replace 迭代来执行此操作。

df.animals = df.groupby(df.index.to_datetime().day).transform(lambda x: x.replace(to_replace=0, method='ffill'))
df.animals = df.groupby(df.index.to_datetime().day).transform(lambda x: x.replace(to_replace=0, method='bfill'))

df

animals
2011-01-01 00:00:00 cat
2011-01-01 08:00:00 cat
2011-01-01 16:00:00 cat
2011-01-02 00:00:00 dog
2011-01-02 08:00:00 dog
2011-01-02 16:00:00 dog
2011-01-03 00:00:00 mouse
2011-01-03 08:00:00 mouse
2011-01-03 16:00:00 mouse
2011-01-04 00:00:00 ant
2011-01-04 08:00:00 ant
2011-01-04 16:00:00 ant

它工作正常,但我认为可能有一种方法来 ffillbfill 所以认为值得检查一下。

最佳答案

IIUC 你可以这样做:

In [278]: df['animals'] = df['animals'].replace(0, np.nan) \
.groupby(pd.TimeGrouper('D')) \
.bfill().ffill()

In [279]: df
Out[279]:
animals
2011-01-01 00:00:00 cat
2011-01-01 08:00:00 cat
2011-01-01 16:00:00 cat
2011-01-02 00:00:00 dog
2011-01-02 08:00:00 dog
2011-01-02 16:00:00 dog
2011-01-03 00:00:00 mouse
2011-01-03 08:00:00 mouse
2011-01-03 16:00:00 mouse
2011-01-04 00:00:00 ant
2011-01-04 08:00:00 ant
2011-01-04 16:00:00 ant

关于python - 在 Pandas 中使用替换同时 ffill 和 bfill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com