pandas 按组填充并在两个值之间填充

py49o6xq  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(162)

我想用group填充两个值之间的所有行。对于每个groupvar1都有两个等于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()
mzmfm0qo

mzmfm0qo1#

假设值仅为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

相关问题