如何替换Pandas数据帧中的不常见元素

时间:2017-06-23 20:08:55

标签: python pandas series

我有一个像这样的Pandas数据框:

                          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                          

当我在Series Activity上执行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的所有项目,并使用字符串'other'。

我已经考虑/尝试通过手动迭代数据框并替换它们来做到这一点,但我的数据帧有几万行,效率非常低。什么是更好的方法来实现这一目标?

3 个答案:

答案 0 :(得分:4)

让我们使用groupbytransform

df.assign(Activity=df.groupby('Activity')['Activity'].transform(lambda x: x if x.size>=20 else 'other'))

答案 1 :(得分:1)

df.loc[df.Activity.isin(vc.index[vc<20].values), 'Activity'] = 'other'

其中vcvalue_counts

的结果

答案 2 :(得分:0)

你可以使用非常快的 pd.Series.map

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