如何替换Pandas DataFrame中的不常见元素



我有一个看起来像这样的pandas dataframe:

                          Date  Time Spent (seconds)                     Activity
    0      2017-03-23T00:00:00                    92                  netflix.com
    1      2017-03-23T00:05:00                   158                  netflix.com
    2      2017-03-23T00:25:00                   285                  netflix.com
    3      2017-03-23T00:30:00                     5                  netflix.com
    4      2017-03-23T00:40:00                   214                  netflix.com
    5      2017-03-23T00:45:00                   300                  netflix.com
    6      2017-03-23T00:45:00                     5  Google Calendar for Android
    7      2017-03-23T00:45:00                     3                   Google Now
    8      2017-03-23T00:45:00                     1           LinkedIn - Android
    9      2017-03-23T00:50:00                    33                  netflix.com
    10     2017-03-23T01:10:00                   167                  netflix.com                          

当我在系列活动上进行value_counts时,我会得到以下内容:

    WhatsApp Messenger Android            1111
    netflix.com                            881
    mendeley desktop                       756
    sharelatex.com                         722
    Google Now                             647
    newtab                                 584
    google.co.uk                           501
    microsoft word                         449

我想替换原始数据框架中的所有项目,其计数/出现小于20的字符串"其他"。

我已经考虑/尝试通过通过数据框架手动迭代并替换它们来执行此操作,但是我的DataFrame有数十万行,这非常低效。实现这一目标的更好方法是什么?

让我们使用groupbytransform

df.assign(Activity=df.groupby('Activity')['Activity'].transform(lambda x: x if x.size>=20 else 'other'))
df.loc[df.Activity.isin(vc.index[vc<20].values), 'Activity'] = 'other'

其中vcvalue_counts

的结果

您可以使用 pd.series.map 非常快:

VC = df['Activity'].value_counts()
df['Activity'] = df['Activity'].map(lambda p : p if VC[p]>20 else 'other')

最新更新