按组和两个值之间填充



我想用group填充两个值之间的所有行。对于每个group,var1有两个等于1的值,我想填充两个1之间的缺失行。var1表示我拥有的,var2表示我想要的,var3表示我用代码获得的,但它不是我想要的(与var2不同):

var1 group var2 var3
NaN  1     NaN  NaN
NaN  1     NaN  NaN
1    1     1    1
NaN  1     1    1
NaN  1     1    1
1    1     1    1
NaN  1     NaN  1
NaN  1     NaN  1   
1    2     1    1
NaN  2     1    1
1    2     1    1
NaN  2     NaN  1

我代码:

df.var3 = df.groupby('group')['var1'].bffill()

假设值只有1或NaN,您可以groupby.ffillgroupby.bfill,并且只保留相同的值:

g = df.groupby('group')['var1']
s1 = g.ffill()
s2 = g.bfill()
df['var2'] = s1.where(s1.eq(s2))

输出:

var1  group  var2
0    NaN      1   NaN
1    NaN      1   NaN
2    1.0      1   1.0
3    NaN      1   1.0
4    NaN      1   1.0
5    1.0      1   1.0
6    NaN      1   NaN
7    NaN      1   NaN
8    1.0      2   1.0
9    NaN      2   1.0
10   1.0      2   1.0
11   NaN      2   NaN

中间体:

var1  group  var2  ffill  bfill
0    NaN      1   NaN    NaN    1.0
1    NaN      1   NaN    NaN    1.0
2    1.0      1   1.0    1.0    1.0
3    NaN      1   1.0    1.0    1.0
4    NaN      1   1.0    1.0    1.0
5    1.0      1   1.0    1.0    1.0
6    NaN      1   NaN    1.0    NaN
7    NaN      1   NaN    1.0    NaN
8    1.0      2   1.0    1.0    1.0
9    NaN      2   1.0    1.0    1.0
10   1.0      2   1.0    1.0    1.0
11   NaN      2   NaN    1.0    NaN

最新更新