2017-06-23 56 views
2

我有一个熊猫数据框,看起来像这样:如何更换大熊猫数据帧罕见的元素

      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 

我会喜欢用字符串'other'来替换原始数据框中的计数/出现次数小于20的系列活动中的所有项目。

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

回答

4

让我们用groupbytransform

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

你可以使用pd.Series.map这是非常快:

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

谢谢!这工作,非常快:) –

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

其中vcvalue_counts

结果