【问题标题】:Pandas fill from last row meeting certain criteria?熊猫从满足某些标准的最后一行填充?
【发布时间】:2019-03-03 12:07:14
【问题描述】:

我有一个 pandas 数据框,它的部分看起来像这样(零是 NaN):

...
     18  19  20
197  14  28  14
198  14   0  14
200   0   0   0
201   0   0   0
202  15  23  12
203  16   0  18
204   0   0   0
205   0   0   0

...

我需要用最后一行的值填充特定列上具有 NaN 的行,这些列上没有 NaN。
在我的示例中,第 200,201 行将填充第 197 行中的值,第 202 行中的第 204,205 行。

LE:第 198 和 203 行在我感兴趣的所有列上都没有 NaN,所以它们被单独留下。

pythonic 的写法是什么?

【问题讨论】:

  • 您认为0 填充的行会被198 行替换吗?
  • 为什么第 197 行(倒数第二行,最后一行,no 零值)为 200,201,而第 203 行(最后一行,有一个 0 值)为 204,205?不应该是197和202,还是198和203?否则逻辑不一致。
  • 是的,有一个错字,你是对的!

标签: python pandas data-science


【解决方案1】:

我相信您需要由ffillDataFrame.mask 前向填充,以便为至少一个NaN 通过DataFrame.any 的所有行创建缺失值,然后通过@ 过滤掉行中并非所有缺失值的行987654323@:

df = df.replace(0, np.nan)

m = df.isnull()
df1 = df.mask(m.any(axis=1)).ffill()
df2 = df.mask(m.all(axis=1), df1, axis=1)
print (df2)
       18    19    20
197  14.0  28.0  14.0
198  14.0   NaN  14.0
200  14.0  28.0  14.0
201  14.0  28.0  14.0
202  15.0  23.0  12.0
203  16.0   NaN  18.0
204  15.0  23.0  12.0
205  15.0  23.0  12.0

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2020-05-16
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多