将最后一个有效索引替换为特定值
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或任何其他值替换最后一个值。谢谢!
答案
使用.values
和get_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
以上是关于将最后一个有效索引替换为特定值的主要内容,如果未能解决你的问题,请参考以下文章