gpt4 book ai didi

pandas - 如何在特定范围内的 Pandas 中选择 NaN 值

转载 作者:行者123 更新时间:2023-12-01 00:12:14 26 4
gpt4 key购买 nike

我有一个这样的数据框:

df = pd.DataFrame({'col1': [5,6,np.nan, np.nan,np.nan, 4, np.nan, np.nan,np.nan, np.nan,7,8,8, np.nan, 5 , np.nan]})

df:
col1
0 5.0
1 6.0
2 NaN
3 NaN
4 NaN
5 4.0
6 NaN
7 NaN
8 NaN
9 NaN
10 7.0
11 8.0
12 8.0
13 NaN
14 5.0
15 NaN

这些 NaN值应按以下方式替换。第一个选择应该是这样的。
2   NaN 
3 NaN
4 NaN
5 4.0
6 NaN
7 NaN
8 NaN
9 NaN

然后这些 Nan值应替换为该选择中的唯一值,4。
第二个选择是:
13  NaN
14 5.0
15 NaN

而这些 NaN值应替换为 5。

isnull()您可以选择 NaN数据框中的值,但如何能够在 Pandas 中过滤/选择这些特定范围?

最佳答案

解决方案,如果缺失值在一个非缺失值附近 - 解决方案创建唯一的组并通过向前和向后填充在组中替换:

#test missing values
s = df['col1'].isna()
#create unique groups
v = s.ne(s.shift()).cumsum()
#count groups and get only 1 value around, filter only misising values groups
mask = v.map(v.value_counts()).eq(1) | s
#groups for replacement per groups
g = mask.ne(mask.shift()).cumsum()

df['col2'] = df.groupby(g)['col1'].apply(lambda x: x.ffill().bfill())
print (df)
col1 col2
0 5.0 5.0
1 6.0 6.0
2 NaN 4.0
3 NaN 4.0
4 NaN 4.0
5 4.0 4.0
6 NaN 4.0
7 NaN 4.0
8 NaN 4.0
9 NaN 4.0
10 7.0 7.0
11 8.0 8.0
12 8.0 8.0
13 NaN 5.0
14 5.0 5.0
15 NaN 5.0

关于pandas - 如何在特定范围内的 Pandas 中选择 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037675/

26 4 0
文章推荐: racket - 如何从涂鸦/文本重新导出 #%module-begin 等?
文章推荐: javascript - 当单击子复选框 <input> 时,React/HTML 取消父
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com