如何用特定的熊猫列值替换n个上限值和下限值

时间:2019-11-01 07:31:25

标签: python pandas dataframe

我有一个这样的数据框,

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

我想在这种情况下从上面的数据帧中创建另一个数据帧,如果在col2中找到Y,则用col2的前n个值和后n个值将Y替换为N。在哪里可以更改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方式或熊猫快捷方式来有效地做到这一点。

1 个答案:

答案 0 :(得分:1)

一个想法是将Series.interpolatelimitlimit_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

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

limit