категория панд: оставьте только самые распространенные и замените остальные на NaN - PullRequest
1 голос
/ 22 октября 2019

В pd.Series с dtype=category у меня 253 уникальных значения. Некоторые из них происходят довольно часто, а другие встречаются только один или два раза. Теперь я хотел бы сохранить только первые 10 из них и заменить остальные на np.nan.

Я получил до top = df['cats'].value_counts().head(10), чтобы создать категории, которые я хочу сохранить. Но сейчас?

Что-то вроде df['cats'].apply(cat_replace, args=top)?

def cat_replace(c, top):
    if c in top:
        return c
    else:
        return np.nan

Это, однако, не выглядит для меня слишком «пандами», и я чувствую, что есть лучший способ. Есть лучшие предложения?

Ответы [ 2 ]

2 голосов
/ 22 октября 2019
# Sample data.
df = pd.DataFrame(
    {'cats': pd.Categorical(
        list('abcdefghij') * 5
        + list('klmnopqrstuvwxyz'))}
)

top_n = 10
top_cats = df['cats'].value_counts().head(top_n).index.tolist()
df.loc[~df['cats'].isin(top_cats), 'cats'] = np.nan
0 голосов
/ 22 октября 2019

Cribbing from

Как сохранить строки фрейма данных pandas, соответствующие определенному условию, с помощью value_counts () в нескольких столбцах

Вы можете посмотреть наделать что-то вроде

top = set(df['cats'].value_counts().head(10))
df['cats'].apply(top.__contains__)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...