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

问题描述 投票:1回答:2

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

    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或任何其他值替换最后一个值。谢谢!

pandas dataframe indexing
2个回答
1
投票

使用.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

2
投票

您可以在反向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
© www.soinside.com 2019 - 2024. All rights reserved.