我想在多索引数据帧上使用fillna,并且仅在其保留在同一索引中时填充特定列。下一个索引可能以n / a开头,因此我无法在该列上调用fillna。群组的大小正在变化,因此我无法通过数字限制功能。

如果df是:

1                     Val
fooTitle barTitle
foo      foo1       valueA
         foo2       NaN
         foo3       NaN
bar      bar1       NaN
         bar2       NaN
         bar3       NaN
         bar4       NaN
baz      baz1       valueB
         baz2       NaN
         baz3       NaN


我希望它是:

1                     Val
fooTitle barTitle
foo      foo1       valueA
         foo2       valueA
         foo3       valueA
bar      bar1       NaN
         bar2       NaN
         bar3       NaN
         bar4       NaN
baz      baz1       valueB
         baz2       valueB
         baz3       valueB


我很讨厌使用groupby(),但是在指南中他们特别指出组对象是不可变的。 (他们特别提到fillna:


  不对组块执行就地操作。组块
  应该被视为不可变的,并且对组块的更改可能
  产生意想不到的结果。例如,当使用fillna时,就地
  必须为False(grouped.transform(lambda x:x.fillna(inplace = False)))



如何在每个组上使用该功能?

最佳答案

如果您要填充的值始终是问题中建议的第一个值,则可以使用以下方法。

df = df.groupby(level= "fooTitle").ffill()

关于python - 如何在分组数据框上使用fillna?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55620039/

10-11 20:13