Заменить последний действительный индекс на конкретное значение - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над фреймом данных, который имеет один горячий кодированный столбец.Для простоты, скажем, это выглядит так:

    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 голосов
/ 13 февраля 2019

Использование .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
0 голосов
/ 13 февраля 2019

Вы можете взять 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...