如何使用 pandas 中前一个非 na 值和下一个非 na 值的平均值填充列中的 na 值?
How do I fill na values in a column with the average of previous non-na and next non-na value in pandas?
原始 table:
Column A
5
nan
nan
15
新 table:
Column A
5
10
10
15
一个选项可能如下(使用 fillna
两次(使用选项 ffill
和 bfill
)然后取它们的平均值):
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': [np.nan, 5, np.nan, np.nan, 15]})
filled_series = [df['x'].fillna(method=m) for m in ('ffill', 'bfill')]
print(pd.concat(filled_series, axis=1).mean(axis=1))
# 0 5.0
# 1 5.0
# 2 10.0
# 3 10.0
# 4 15.0
如您所见,即使 nan
发生在开头或结尾,这仍然有效。
原始 table:
Column A |
---|
5 |
nan |
nan |
15 |
新 table:
Column A |
---|
5 |
10 |
10 |
15 |
一个选项可能如下(使用 fillna
两次(使用选项 ffill
和 bfill
)然后取它们的平均值):
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': [np.nan, 5, np.nan, np.nan, 15]})
filled_series = [df['x'].fillna(method=m) for m in ('ffill', 'bfill')]
print(pd.concat(filled_series, axis=1).mean(axis=1))
# 0 5.0
# 1 5.0
# 2 10.0
# 3 10.0
# 4 15.0
如您所见,即使 nan
发生在开头或结尾,这仍然有效。