gpt4 book ai didi

python - 如何用特定的 Pandas 列值替换 n 个顶部和底部值

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:27 25 4
gpt4 key购买 nike

我有一个这样的数据框,

col1    col2
1 N
2 N
3 N
4 Y
5 N
6 N
7 Y
8 N
9 N
10 N

我想在这种情况下从上面的数据框创建另一个数据框,如果在 col2 中找到 Y,则将 N 替换为具有 col2 的顶部和底部 n 个值的 Y。我可以在哪里更改 n 的值。

例如,如果 n 的值为 1,则所需的输出将是,

 col1    col2
1 N
2 N
3 Y
4 Y
5 Y
6 Y
7 Y
8 Y
9 N
10 N

我可以使用 for 循环迭代来完成,但执行时间会很长。我正在寻找 pythonic 方式或 pandas 快捷方式来高效地完成它。

最佳答案

一个想法是使用 Series.interpolate使用 limitlimit_direction='both' 参数,但只使用数字,所以添加了 map 然后通过掩码的映射值进行比较,最后通过 loc 掩码设置值:

N = 1
m = df['col2'].map({'Y':1}).interpolate(limit=N, limit_direction='both').eq(1)
df.loc[m, 'col2'] = 'Y'
#alternative
#df['col2'] = df['col2'].mask(m, 'Y')
print (df)
col1 col2
0 1 N
1 2 N
2 3 Y
3 4 Y
4 5 Y
5 6 Y
6 7 Y
7 8 Y
8 9 N
9 10 N

另一种解决方案是使用 ffillbfilllimit 参数向前和向后填充缺失值:

N = 2
s = df['col2'].mask(df['col2'] == 'N')
df['col2'] = s.ffill(limit=N).fillna(s.bfill(limit=N)).fillna(df['col2'])
print (df)
col1 col2
0 1 N
1 2 Y
2 3 Y
3 4 Y
4 5 Y
5 6 Y
6 7 Y
7 8 Y
8 9 Y
9 10 N

关于python - 如何用特定的 Pandas 列值替换 n 个顶部和底部值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58655654/

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