将最后一个有效索引替换为特定值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将最后一个有效索引替换为特定值相关的知识,希望对你有一定的参考价值。

我正在研究一个有一个热编码列的数据框。为简单起见,让我们说它看起来像这样:

    a   b
0   1 NaN
1   1   1
2   1 NaN
3 NaN   1

我想用NaN替换最后一个可用值。我正在获取最后一个可用的索引位置

df.apply(pd.Series.last_valid_index)

Out[6]:
a    2
b    3

所以使用它,我想使用

df.replace(df.apply(pd.Series.last_valid_index), np.nan)

这似乎不会用NaN替换最后一个有效的索引单元格。有没有人知道如何用NaN或任何其他值替换最后一个值。谢谢!

答案

使用.valuesget_indexer

s=df.apply(pd.Series.last_valid_index)

df.values[df.index.get_indexer(s),df.columns.get_indexer(s.index.tolist())]=99999
df
         a        b
0      1.0      NaN
1      1.0      1.0
2  99999.0      NaN
3      NaN  99999.0
另一答案

您可以在反向DataFrame上获取idxmax:

In [11]: pd.notnull(df[::-1]).idxmax()
Out[11]:
a    2
b    3
dtype: int64

要将它们设置为NaN,您可以使用for循环:

for c, i in pd.notnull(df[::-1]).idxmax().items():
    df.at[i, c] = np.nan

以上是关于将最后一个有效索引替换为特定值的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV用另一个值替换特定像素值

除非被特定标签包围,否则替换字符

python读取文本文件,如何将每行最后一个特定字符替换?

如何使用str.contains函数使用行索引替换单元格值

替换的片段在背景上仍然可见

如何替换python列表特定索引处的值?