簡體   English   中英

僅當整行(每列)具有 NaN 值時,將 pandas 中的行替換為下一行

[英]Replace row in pandas with next row only when the entire row (each column) has NaN values

我有一個 DataFrame ,我只想用它下面的行替換每列中具有 NaN 值的行。 我嘗試了來自多個提要的解決方案並使用了 ffill ,但這導致填充了幾個單元格而不是整行。

     ss       s        h       b     sb
0   NaN     NaN      NaN     NaN    NaN
1   3.0     NaN     14.0     NaN    8.0
2   9.0     8.0     23.0     NaN    2.0
3   NaN     NaN      NaN     NaN    NaN
4   NaN     NaN      NaN     NaN    NaN
5   1.0     6.0      7.0    11.0    3.0

預期 output:

     ss       s        h       b     sb
0   3.0     NaN     14.0     NaN    8.0
1   3.0     NaN     14.0     NaN    8.0
2   9.0     8.0     23.0     NaN    2.0
3   1.0     6.0      7.0    11.0    3.0
4   1.0     6.0      7.0    11.0    3.0
5   1.0     6.0      7.0    11.0    3.0

您可以通過按列的交換順序測試僅具有累積總和的缺失值的行並傳遞給GroupBy.bfill來創建組:

df = df.groupby((df.notna().any(axis=1)).iloc[::-1].cumsum().iloc[::-1]).bfill()

print (df)
    ss    s     h     b   sb
0  3.0  NaN  14.0   NaN  8.0
1  3.0  NaN  14.0   NaN  8.0
2  9.0  8.0  23.0   NaN  2.0
3  1.0  6.0   7.0  11.0  3.0
4  1.0  6.0   7.0  11.0  3.0
5  1.0  6.0   7.0  11.0  3.0

詳情

print ((df.notna().any(axis=1)).iloc[::-1].cumsum().iloc[::-1])
0    3
1    3
2    2
3    1
4    1
5    1
dtype: int32

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM