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

时间:2019-02-12 22:18:58

标签: pandas dataframe indexing

我正在处理具有一个热编码列的数据帧。为简单起见,假设它看起来像这样:

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

2 个答案:

答案 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

答案 1 :(得分: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